From 98e7db03de9564815c04b4304e2b333354f44976 Mon Sep 17 00:00:00 2001 From: Lee Wright <258036@NTTDATA.COM> Date: Sat, 11 May 2024 12:36:47 -0700 Subject: [PATCH 01/21] build file updates --- .../workflows/build-push-admin-frontend.yml | 39 ++++++++ .github/workflows/build-push-approvalflow.yml | 86 ++++++++++++++++ .../workflows/build-push-casemanagement.yml | 86 ++++++++++++++++ .github/workflows/build-push-diamconfig.yml | 86 ++++++++++++++++ .github/workflows/build-push-disclosure.yml | 86 ++++++++++++++++ .github/workflows/build-push-edtcore.yml | 84 ++++++++++++++++ .github/workflows/build-push-frontend.yml | 93 ++++++++++++++++++ .github/workflows/build-push-jumapi.yml | 86 ++++++++++++++++ .github/workflows/build-push-notification.yml | 86 ++++++++++++++++ .github/workflows/build-push-sso-dev.yml | 97 +++++++++++++++++++ .github/workflows/build-push-webapi.yml | 86 ++++++++++++++++ 11 files changed, 915 insertions(+) create mode 100644 .github/workflows/build-push-admin-frontend.yml create mode 100644 .github/workflows/build-push-approvalflow.yml create mode 100644 .github/workflows/build-push-casemanagement.yml create mode 100644 .github/workflows/build-push-diamconfig.yml create mode 100644 .github/workflows/build-push-disclosure.yml create mode 100644 .github/workflows/build-push-edtcore.yml create mode 100644 .github/workflows/build-push-frontend.yml create mode 100644 .github/workflows/build-push-jumapi.yml create mode 100644 .github/workflows/build-push-notification.yml create mode 100644 .github/workflows/build-push-sso-dev.yml create mode 100644 .github/workflows/build-push-webapi.yml diff --git a/.github/workflows/build-push-admin-frontend.yml b/.github/workflows/build-push-admin-frontend.yml new file mode 100644 index 00000000..0bc0d5d6 --- /dev/null +++ b/.github/workflows/build-push-admin-frontend.yml @@ -0,0 +1,39 @@ +name: diam-admin-frontend + +on: + push: + branches: [develop,test,main] + paths: + - "diam-admin-ui/**" + - ".github/workflows/build-push-admin-frontend.yml" + workflow_dispatch: +env: + IMAGE_NAME: diam-admin-frontend + WORKING_DIRECTORY: ./diam-admin-ui + +jobs: + build: + runs-on: ubuntu-latest + if: github.event_name == 'push' + + steps: + - uses: actions/checkout@v3 + + - name: Branch name + run: echo running on branch ${GITHUB_REF##*/} + + - name: Login to Artifactory + uses: docker/login-action@v1 + with: + registry: artifacts.developer.gov.bc.ca + username: ${{ secrets.ARTIFACTORY_USERNAME }} + password: ${{ secrets.ARTIFACTORY_PASSWORD }} + + - name: Build Image + working-directory: ${{env.WORKING_DIRECTORY}} + run: | + docker build -t artifacts.developer.gov.bc.ca/de27-general-docker/${{env.IMAGE_NAME}}:${GITHUB_REF##*/} . + + - name: Docker Push to Artifactory + run: | + docker push artifacts.developer.gov.bc.ca/de27-general-docker/${{env.IMAGE_NAME}}:${GITHUB_REF##*/} diff --git a/.github/workflows/build-push-approvalflow.yml b/.github/workflows/build-push-approvalflow.yml new file mode 100644 index 00000000..8198897a --- /dev/null +++ b/.github/workflows/build-push-approvalflow.yml @@ -0,0 +1,86 @@ +name: diam-approvalflow + +on: + push: + branches: [develop,test,main] + paths: + - "backend/ApprovalFlow/**" + - ".github/workflows/build-push-approvalflow.yml" + workflow_dispatch: +env: + IMAGE_NAME: diam-approvalflow + WORKING_DIRECTORY: ./backend + +jobs: + build: + runs-on: ubuntu-latest + if: github.event_name == 'push' + + steps: + - uses: actions/checkout@v3 + + - name: Branch name + run: echo running on branch ${GITHUB_REF##*/} + + - name: Login to Artifactory + uses: docker/login-action@v1 + with: + registry: artifacts.developer.gov.bc.ca + username: ${{ secrets.ARTIFACTORY_USERNAME }} + password: ${{ secrets.ARTIFACTORY_PASSWORD }} + + - name: Build Image + working-directory: ${{env.WORKING_DIRECTORY}} + run: | + docker build -t artifacts.developer.gov.bc.ca/de27-general-docker/${{env.IMAGE_NAME}}:${GITHUB_REF##*/} -f Dockerfile.ApprovalFlow . + + - name: Docker Push to Artifactory + run: | + docker push artifacts.developer.gov.bc.ca/de27-general-docker/${{env.IMAGE_NAME}}:${GITHUB_REF##*/} + + - name: Checkout ArgoCD Repo + id: gitops + if: steps.publish.outcome == 'success' + uses: actions/checkout@v4 + with: + repository: bcgov-c/tenant-gitops-e27db1 + ref: develop + token: ${{ secrets.ARGO_PAT }} # access token + path: gitops + + - name: Update Helm Values and Commit + id: helm + if: steps.gitops.outcome == 'success' # Only run if the previous step (publish) was successful + run: | + + echo "Updating helm values to trigger ArgoCD deployment " + + # Navigate to the directory containing your Helm values file for the environment develop -> DEV, test -> test + cd gitops/charts + + # Update the Helm values file with the new image tag and version + DATETIME=$(date +'%Y-%m-%d %H:%M:%S') # Get current date and time + echo "Updating tag apitag: to ${{ steps.short_sha.outputs.SHORT_SHA }}" + + sed -i "s/apitag: .*/apitag: dev-${{ steps.short_sha.outputs.SHORT_SHA }} # Image Updated on $DATETIME/" ../deploy/dev_values.yaml + sed -i "s/apitag: .*/apitag: dev-${{ steps.short_sha.outputs.SHORT_SHA }} # Image Updated on $DATETIME/" approvalflow/values.yaml + + # Commit and push the changes + git config --global user.email "actions@github.com" + git config --global user.name "GitHub Actions" + + git add . + + git add ../deploy/dev_values.yaml + + # Repackage Helm Chart + + cd approvalflow + + helm dependency build + + git add . + + git commit -m "Update Dev API image tag" + git push origin develop # Update the branch name as needed + diff --git a/.github/workflows/build-push-casemanagement.yml b/.github/workflows/build-push-casemanagement.yml new file mode 100644 index 00000000..70cae429 --- /dev/null +++ b/.github/workflows/build-push-casemanagement.yml @@ -0,0 +1,86 @@ +name: diam-casemanagement + +on: + push: + branches: [develop,test,main] + paths: + - "backend/edt.casemanagement/**" + - ".github/workflows/build-push-casemanagement.yml" + workflow_dispatch: +env: + IMAGE_NAME: diam-casemanagement + WORKING_DIRECTORY: ./backend + +jobs: + build: + runs-on: ubuntu-latest + if: github.event_name == 'push' + + steps: + - uses: actions/checkout@v3 + + - name: Branch name + run: echo running on branch ${GITHUB_REF##*/} + + - name: Login to Artifactory + uses: docker/login-action@v1 + with: + registry: artifacts.developer.gov.bc.ca + username: ${{ secrets.ARTIFACTORY_USERNAME }} + password: ${{ secrets.ARTIFACTORY_PASSWORD }} + + - name: Build Image + working-directory: ${{env.WORKING_DIRECTORY}} + run: | + docker build -t artifacts.developer.gov.bc.ca/de27-general-docker/${{env.IMAGE_NAME}}:${GITHUB_REF##*/} -f Dockerfile.CaseManagement . + + - name: Docker Push to Artifactory + run: | + docker push artifacts.developer.gov.bc.ca/de27-general-docker/${{env.IMAGE_NAME}}:${GITHUB_REF##*/} + + - name: Checkout ArgoCD Repo + id: gitops + if: steps.publish.outcome == 'success' + uses: actions/checkout@v4 + with: + repository: bcgov-c/tenant-gitops-e27db1 + ref: develop + token: ${{ secrets.ARGO_PAT }} # access token + path: gitops + + - name: Update Helm Values and Commit + id: helm + if: steps.gitops.outcome == 'success' # Only run if the previous step (publish) was successful + run: | + + echo "Updating helm values to trigger ArgoCD deployment " + + # Navigate to the directory containing your Helm values file for the environment develop -> DEV, test -> test + cd gitops/charts + + # Update the Helm values file with the new image tag and version + DATETIME=$(date +'%Y-%m-%d %H:%M:%S') # Get current date and time + echo "Updating tag apitag: to ${{ steps.short_sha.outputs.SHORT_SHA }}" + + sed -i "s/apitag: .*/apitag: dev-${{ steps.short_sha.outputs.SHORT_SHA }} # Image Updated on $DATETIME/" ../deploy/dev_values.yaml + sed -i "s/apitag: .*/apitag: dev-${{ steps.short_sha.outputs.SHORT_SHA }} # Image Updated on $DATETIME/" edt-casemgmt/values.yaml + + # Commit and push the changes + git config --global user.email "actions@github.com" + git config --global user.name "GitHub Actions" + + git add . + + git add ../deploy/dev_values.yaml + + # Repackage Helm Chart + + cd edt-casemgmt + + helm dependency build + + git add . + + git commit -m "Update Dev API image tag" + git push origin develop # Update the branch name as needed + diff --git a/.github/workflows/build-push-diamconfig.yml b/.github/workflows/build-push-diamconfig.yml new file mode 100644 index 00000000..f49e47c4 --- /dev/null +++ b/.github/workflows/build-push-diamconfig.yml @@ -0,0 +1,86 @@ +name: diam-config + +on: + push: + branches: [develop,test,main] + paths: + - "backend/DIAMConfiguration/**" + - ".github/workflows/build-push-diamconfig.yml" + workflow_dispatch: +env: + IMAGE_NAME: diam-config + WORKING_DIRECTORY: ./backend + +jobs: + build: + runs-on: ubuntu-latest + if: github.event_name == 'push' + + steps: + - uses: actions/checkout@v3 + + - name: Branch name + run: echo running on branch ${GITHUB_REF##*/} + + - name: Login to Artifactory + uses: docker/login-action@v1 + with: + registry: artifacts.developer.gov.bc.ca + username: ${{ secrets.ARTIFACTORY_USERNAME }} + password: ${{ secrets.ARTIFACTORY_PASSWORD }} + + - name: Build Image + working-directory: ${{env.WORKING_DIRECTORY}} + run: | + docker build -t artifacts.developer.gov.bc.ca/de27-general-docker/${{env.IMAGE_NAME}}:${GITHUB_REF##*/} -f Dockerfile.DIAMConfig . + + - name: Docker Push to Artifactory + run: | + docker push artifacts.developer.gov.bc.ca/de27-general-docker/${{env.IMAGE_NAME}}:${GITHUB_REF##*/} + + - name: Checkout ArgoCD Repo + id: gitops + if: steps.publish.outcome == 'success' + uses: actions/checkout@v4 + with: + repository: bcgov-c/tenant-gitops-e27db1 + ref: develop + token: ${{ secrets.ARGO_PAT }} # access token + path: gitops + + - name: Update Helm Values and Commit + id: helm + if: steps.gitops.outcome == 'success' # Only run if the previous step (publish) was successful + run: | + + echo "Updating helm values to trigger ArgoCD deployment " + + # Navigate to the directory containing your Helm values file for the environment develop -> DEV, test -> test + cd gitops/charts + + # Update the Helm values file with the new image tag and version + DATETIME=$(date +'%Y-%m-%d %H:%M:%S') # Get current date and time + echo "Updating tag apitag: to ${{ steps.short_sha.outputs.SHORT_SHA }}" + + sed -i "s/apitag: .*/apitag: dev-${{ steps.short_sha.outputs.SHORT_SHA }} # Image Updated on $DATETIME/" ../deploy/dev_values.yaml + sed -i "s/apitag: .*/apitag: dev-${{ steps.short_sha.outputs.SHORT_SHA }} # Image Updated on $DATETIME/" diam-config/values.yaml + + # Commit and push the changes + git config --global user.email "actions@github.com" + git config --global user.name "GitHub Actions" + + git add . + + git add ../deploy/dev_values.yaml + + # Repackage Helm Chart + + cd diam-config + + helm dependency build + + git add . + + git commit -m "Update Dev API image tag" + git push origin develop # Update the branch name as needed + diff --git a/.github/workflows/build-push-disclosure.yml b/.github/workflows/build-push-disclosure.yml new file mode 100644 index 00000000..458077d6 --- /dev/null +++ b/.github/workflows/build-push-disclosure.yml @@ -0,0 +1,86 @@ +name: diam-disclosure + +on: + push: + branches: [develop,test,main] + paths: + - "backend/edt.disclosure/**" + - ".github/workflows/build-push-disclosure.yml" + workflow_dispatch: +env: + IMAGE_NAME: diam-disclosure + WORKING_DIRECTORY: ./backend + +jobs: + build: + runs-on: ubuntu-latest + if: github.event_name == 'push' + + steps: + - uses: actions/checkout@v3 + + - name: Branch name + run: echo running on branch ${GITHUB_REF##*/} + + - name: Login to Artifactory + uses: docker/login-action@v1 + with: + registry: artifacts.developer.gov.bc.ca + username: ${{ secrets.ARTIFACTORY_USERNAME }} + password: ${{ secrets.ARTIFACTORY_PASSWORD }} + + - name: Build Image + working-directory: ${{env.WORKING_DIRECTORY}} + run: | + docker build -t artifacts.developer.gov.bc.ca/de27-general-docker/${{env.IMAGE_NAME}}:${GITHUB_REF##*/} -f Dockerfile.Disclosure . + + - name: Docker Push to Artifactory + run: | + docker push artifacts.developer.gov.bc.ca/de27-general-docker/${{env.IMAGE_NAME}}:${GITHUB_REF##*/} + + - name: Checkout ArgoCD Repo + id: gitops + if: steps.publish.outcome == 'success' + uses: actions/checkout@v4 + with: + repository: bcgov-c/tenant-gitops-e27db1 + ref: develop + token: ${{ secrets.ARGO_PAT }} # access token + path: gitops + + - name: Update Helm Values and Commit + id: helm + if: steps.gitops.outcome == 'success' # Only run if the previous step (publish) was successful + run: | + + echo "Updating helm values to trigger ArgoCD deployment " + + # Navigate to the directory containing your Helm values file for the environment develop -> DEV, test -> test + cd gitops/charts + + # Update the Helm values file with the new image tag and version + DATETIME=$(date +'%Y-%m-%d %H:%M:%S') # Get current date and time + echo "Updating tag apitag: to ${{ steps.short_sha.outputs.SHORT_SHA }}" + + sed -i "s/apitag: .*/apitag: dev-${{ steps.short_sha.outputs.SHORT_SHA }} # Image Updated on $DATETIME/" ../deploy/dev_values.yaml + sed -i "s/apitag: .*/apitag: dev-${{ steps.short_sha.outputs.SHORT_SHA }} # Image Updated on $DATETIME/" edt-disclosure/values.yaml + + # Commit and push the changes + git config --global user.email "actions@github.com" + git config --global user.name "GitHub Actions" + + git add . + + git add ../deploy/dev_values.yaml + + # Repackage Helm Chart + + cd edt-disclosure + + helm dependency build + + git add . + + git commit -m "Update Dev API image tag" + git push origin develop # Update the branch name as needed + diff --git a/.github/workflows/build-push-edtcore.yml b/.github/workflows/build-push-edtcore.yml new file mode 100644 index 00000000..a29eaddb --- /dev/null +++ b/.github/workflows/build-push-edtcore.yml @@ -0,0 +1,84 @@ +name: diam-edtcore + +on: + push: + branches: [develop,test,main] + paths: + - "backend/service.edt/**" + - ".github/workflows/build-push-edtcore.yml" + workflow_dispatch: +env: + IMAGE_NAME: diam-edtcore + WORKING_DIRECTORY: ./backend + +jobs: + build: + runs-on: ubuntu-latest + if: github.event_name == 'push' + + steps: + - uses: actions/checkout@v3 + + - name: Branch name + run: echo running on branch ${GITHUB_REF##*/} + + - name: Login to Artifactory + uses: docker/login-action@v1 + with: + registry: artifacts.developer.gov.bc.ca + username: ${{ secrets.ARTIFACTORY_USERNAME }} + password: ${{ secrets.ARTIFACTORY_PASSWORD }} + + - name: Build Image + working-directory: ${{env.WORKING_DIRECTORY}} + run: | + docker build -t artifacts.developer.gov.bc.ca/de27-general-docker/${{env.IMAGE_NAME}}:${GITHUB_REF##*/} -f Dockerfile.EdtCore . + + - name: Docker Push to Artifactory + run: | + docker push artifacts.developer.gov.bc.ca/de27-general-docker/${{env.IMAGE_NAME}}:${GITHUB_REF##*/} + - name: Checkout ArgoCD Repo + id: gitops + if: steps.publish.outcome == 'success' + uses: actions/checkout@v4 + with: + repository: bcgov-c/tenant-gitops-e27db1 + ref: develop + token: ${{ secrets.ARGO_PAT }} # access token + path: gitops + + - name: Update Helm Values and Commit + id: helm + if: steps.gitops.outcome == 'success' # Only run if the previous step (publish) was successful + run: | + + echo "Updating helm values to trigger ArgoCD deployment " + + # Navigate to the directory containing your Helm values file for the environment develop -> DEV, test -> test + cd gitops/charts + + # Update the Helm values file with the new image tag and version + DATETIME=$(date +'%Y-%m-%d %H:%M:%S') # Get current date and time + echo "Updating tag apitag: to ${{ steps.short_sha.outputs.SHORT_SHA }}" + + sed -i "s/apitag: .*/apitag: dev-${{ steps.short_sha.outputs.SHORT_SHA }} # Image Updated on $DATETIME/" ../deploy/dev_values.yaml + sed -i "s/apitag: .*/apitag: dev-${{ steps.short_sha.outputs.SHORT_SHA }} # Image Updated on $DATETIME/" edt-service/values.yaml + + # Commit and push the changes + git config --global user.email "actions@github.com" + git config --global user.name "GitHub Actions" + + git add . + + git add ../deploy/dev_values.yaml + + # Repackage Helm Chart + cd edt-service + + helm dependency build + + git add . + + git commit -m "Update Dev API image tag" + git push origin develop # Update the branch name as needed + diff --git a/.github/workflows/build-push-frontend.yml b/.github/workflows/build-push-frontend.yml new file mode 100644 index 00000000..53e038c3 --- /dev/null +++ b/.github/workflows/build-push-frontend.yml @@ -0,0 +1,93 @@ +name: diam-frontend + +on: + push: + branches: [develop,test,main] + paths: + - "workspace/**" + - ".github/workflows/build-push-frontend.yml" + workflow_dispatch: +env: + IMAGE_NAME: diam-frontend + WORKING_DIRECTORY: ./workspace + +jobs: + build: + runs-on: ubuntu-latest + if: github.event_name == 'push' + + steps: + - uses: actions/checkout@v3 + + - name: Branch name + run: echo running on branch ${GITHUB_REF##*/} + + - name: Login to Artifactory + uses: docker/login-action@v1 + with: + registry: artifacts.developer.gov.bc.ca + username: ${{ secrets.ARTIFACTORY_USERNAME }} + password: ${{ secrets.ARTIFACTORY_PASSWORD }} + + # Get SHORT_SHA to tag images + - name: Get short SHA + id: short_sha + run: | + echo "::set-output name=SHORT_SHA::$(git rev-parse --short HEAD)" + echo "Short SHA: $SHORT_SHA" + + - name: Build Image + working-directory: ${{env.WORKING_DIRECTORY}} + run: | + docker build -t artifacts.developer.gov.bc.ca/de27-general-docker/${{env.IMAGE_NAME}}:${GITHUB_REF##*/} -f Dockerfile.frontend . + + - name: Docker Push to Artifactory + id: publish + run: | + docker push artifacts.developer.gov.bc.ca/de27-general-docker/${{env.IMAGE_NAME}}:${GITHUB_REF##*/} + + - name: Checkout ArgoCD Repo + id: gitops + if: steps.publish.outcome == 'success' + uses: actions/checkout@v4 + with: + repository: bcgov-c/tenant-gitops-e27db1 + ref: develop + token: ${{ secrets.ARGO_PAT }} # access token + path: gitops + + - name: Update Helm Values and Commit + id: helm + if: steps.gitops.outcome == 'success' # Only run if the previous step (publish) was successful + run: | + + echo "Updating helm values to trigger ArgoCD deployment " + + # Navigate to the directory containing your Helm values file for the environment develop -> DEV, test -> test + cd gitops/charts + + # Update the Helm values file with the new image tag and version + DATETIME=$(date +'%Y-%m-%d %H:%M:%S') # Get current date and time + echo "Updating tag apitag: to ${{ steps.short_sha.outputs.SHORT_SHA }}" + + sed -i "s/apitag: .*/apitag: dev-${{ steps.short_sha.outputs.SHORT_SHA }} # Image Updated on $DATETIME/" ../deploy/dev_values.yaml + sed -i "s/apitag: .*/apitag: dev-${{ steps.short_sha.outputs.SHORT_SHA }} # Image Updated on $DATETIME/" frontend/values.yaml + + # Commit and push the changes + git config --global user.email "actions@github.com" + git config --global user.name "GitHub Actions" + + git add . + + git add ../deploy/dev_values.yaml + + # Repackage Helm Chart + + cd frontend + + helm dependency build + + git add . + + git commit -m "Update Dev API image tag" + git push origin develop # Update the branch name as needed diff --git a/.github/workflows/build-push-jumapi.yml b/.github/workflows/build-push-jumapi.yml new file mode 100644 index 00000000..10fe8655 --- /dev/null +++ b/.github/workflows/build-push-jumapi.yml @@ -0,0 +1,86 @@ +name: diam-jumapi + +on: + push: + branches: [develop,test,main] + paths: + - "backend/jumwebapi/**" + - ".github/workflows/build-push-jumapi.yml" + workflow_dispatch: +env: + IMAGE_NAME: diam-jumapi + WORKING_DIRECTORY: ./backend + +jobs: + build: + runs-on: ubuntu-latest + if: github.event_name == 'push' + + steps: + - uses: actions/checkout@v3 + + - name: Branch name + run: echo running on branch ${GITHUB_REF##*/} + + - name: Login to Artifactory + uses: docker/login-action@v1 + with: + registry: artifacts.developer.gov.bc.ca + username: ${{ secrets.ARTIFACTORY_USERNAME }} + password: ${{ secrets.ARTIFACTORY_PASSWORD }} + + - name: Build Image + working-directory: ${{env.WORKING_DIRECTORY}} + run: | + docker build -t artifacts.developer.gov.bc.ca/de27-general-docker/${{env.IMAGE_NAME}}:${GITHUB_REF##*/} -f Dockerfile.JUMApi . + + - name: Docker Push to Artifactory + run: | + docker push artifacts.developer.gov.bc.ca/de27-general-docker/${{env.IMAGE_NAME}}:${GITHUB_REF##*/} + + - name: Checkout ArgoCD Repo + id: gitops + if: steps.publish.outcome == 'success' + uses: actions/checkout@v4 + with: + repository: bcgov-c/tenant-gitops-e27db1 + ref: develop + token: ${{ secrets.ARGO_PAT }} # access token + path: gitops + + - name: Update Helm Values and Commit + id: helm + if: steps.gitops.outcome == 'success' # Only run if the previous step (publish) was successful + run: | + + echo "Updating helm values to trigger ArgoCD deployment " + + # Navigate to the directory containing your Helm values file for the environment develop -> DEV, test -> test + cd gitops/charts + + # Update the Helm values file with the new image tag and version + DATETIME=$(date +'%Y-%m-%d %H:%M:%S') # Get current date and time + echo "Updating tag apitag: to ${{ steps.short_sha.outputs.SHORT_SHA }}" + + sed -i "s/apitag: .*/apitag: dev-${{ steps.short_sha.outputs.SHORT_SHA }} # Image Updated on $DATETIME/" ../deploy/dev_values.yaml + sed -i "s/apitag: .*/apitag: dev-${{ steps.short_sha.outputs.SHORT_SHA }} # Image Updated on $DATETIME/" jum-backend/values.yaml + + # Commit and push the changes + git config --global user.email "actions@github.com" + git config --global user.name "GitHub Actions" + + git add . + + git add ../deploy/dev_values.yaml + + # Repackage Helm Chart + + cd jum-backend + + helm dependency build + + git add . + + git commit -m "Update Dev API image tag" + git push origin develop # Update the branch name as needed + \ No newline at end of file diff --git a/.github/workflows/build-push-notification.yml b/.github/workflows/build-push-notification.yml new file mode 100644 index 00000000..50d6128b --- /dev/null +++ b/.github/workflows/build-push-notification.yml @@ -0,0 +1,86 @@ +name: diam-notification + +on: + push: + branches: [develop,test,main] + paths: + - "backend/NotificationService/**" + - ".github/workflows/build-push-notification.yml" + workflow_dispatch: +env: + IMAGE_NAME: diam-notification + WORKING_DIRECTORY: ./backend + +jobs: + build: + runs-on: ubuntu-latest + if: github.event_name == 'push' + + steps: + - uses: actions/checkout@v3 + + - name: Branch name + run: echo running on branch ${GITHUB_REF##*/} + + - name: Login to Artifactory + uses: docker/login-action@v1 + with: + registry: artifacts.developer.gov.bc.ca + username: ${{ secrets.ARTIFACTORY_USERNAME }} + password: ${{ secrets.ARTIFACTORY_PASSWORD }} + + - name: Build Image + working-directory: ${{env.WORKING_DIRECTORY}} + run: | + docker build -t artifacts.developer.gov.bc.ca/de27-general-docker/${{env.IMAGE_NAME}}:${GITHUB_REF##*/} -f Dockerfile.Notification . + + - name: Docker Push to Artifactory + run: | + docker push artifacts.developer.gov.bc.ca/de27-general-docker/${{env.IMAGE_NAME}}:${GITHUB_REF##*/} + + - name: Checkout ArgoCD Repo + id: gitops + if: steps.publish.outcome == 'success' + uses: actions/checkout@v4 + with: + repository: bcgov-c/tenant-gitops-e27db1 + ref: develop + token: ${{ secrets.ARGO_PAT }} # access token + path: gitops + + - name: Update Helm Values and Commit + id: helm + if: steps.gitops.outcome == 'success' # Only run if the previous step (publish) was successful + run: | + + echo "Updating helm values to trigger ArgoCD deployment " + + # Navigate to the directory containing your Helm values file for the environment develop -> DEV, test -> test + cd gitops/charts + + # Update the Helm values file with the new image tag and version + DATETIME=$(date +'%Y-%m-%d %H:%M:%S') # Get current date and time + echo "Updating tag apitag: to ${{ steps.short_sha.outputs.SHORT_SHA }}" + + sed -i "s/apitag: .*/apitag: dev-${{ steps.short_sha.outputs.SHORT_SHA }} # Image Updated on $DATETIME/" ../deploy/dev_values.yaml + sed -i "s/apitag: .*/apitag: dev-${{ steps.short_sha.outputs.SHORT_SHA }} # Image Updated on $DATETIME/" jum-notification/values.yaml + + # Commit and push the changes + git config --global user.email "actions@github.com" + git config --global user.name "GitHub Actions" + + git add . + + git add ../deploy/dev_values.yaml + + # Repackage Helm Chart + + cd jum-notification + + helm dependency build + + git add . + + git commit -m "Update Dev API image tag" + git push origin develop # Update the branch name as needed + diff --git a/.github/workflows/build-push-sso-dev.yml b/.github/workflows/build-push-sso-dev.yml new file mode 100644 index 00000000..d7546ebb --- /dev/null +++ b/.github/workflows/build-push-sso-dev.yml @@ -0,0 +1,97 @@ +name: diam-sso-dev + +on: + push: + branches: [develop,test] + paths: + - "auth/**" + - ".github/workflows/build-push-sso-dev.yml" + workflow_dispatch: +env: + IMAGE_NAME: diam-sso + WORKING_DIRECTORY: ./auth + +jobs: + build: + runs-on: ubuntu-latest + if: github.event_name == 'push' + + steps: + - uses: actions/checkout@v3 + - name: Log into registry + uses: docker/login-action@v2 + with: + registry: ${{ secrets.OPENSHIFT_REGISTRY }} + username: ${{ secrets.OPENSHIFT_DEPLOYER_USERNAME }} + password: ${{ secrets.OPENSHIFT_DEPLOYER_PASSWORD }} + + # Get SHORT_SHA to tag images + - name: Get short SHA + id: short_sha + run: | + echo "::set-output name=SHORT_SHA::$(git rev-parse --short HEAD)" + echo "Short SHA: $SHORT_SHA" + + - name: Login to Artifactory + uses: docker/login-action@v1 + with: + registry: artifacts.developer.gov.bc.ca + username: ${{ secrets.ARTIFACTORY_USERNAME }} + password: ${{ secrets.ARTIFACTORY_PASSWORD }} + + - name: Build Image + working-directory: ${{env.WORKING_DIRECTORY}} + run: | + docker build -t artifacts.developer.gov.bc.ca/de27-general-docker/${{env.IMAGE_NAME}}:${GITHUB_REF##*/} -f Dockerfile.kc24 . + + - name: Docker Push to Artifactory + id: publish + run: | + docker push artifacts.developer.gov.bc.ca/de27-general-docker/${{env.IMAGE_NAME}}:${GITHUB_REF##*/} + + + - name: Checkout ArgoCD Repo + id: gitops + if: steps.publish.outcome == 'success' + uses: actions/checkout@v4 + with: + repository: bcgov-c/tenant-gitops-e27db1 + ref: develop + token: ${{ secrets.ARGO_PAT }} # access token + path: gitops + + - name: Update Helm Values and Commit + id: helm + if: steps.gitops.outcome == 'success' # Only run if the previous step (publish) was successful + run: | + + echo "Updating helm values to trigger ArgoCD deployment " + + # Navigate to the directory containing your Helm values file for the environment develop -> DEV, test -> test + cd gitops/charts + + # Update the Helm values file with the new image tag and version + DATETIME=$(date +'%Y-%m-%d %H:%M:%S') # Get current date and time + echo "Updating tag apitag: to ${{ steps.short_sha.outputs.SHORT_SHA }}" + + sed -i "s/apitag: .*/apitag: dev-${{ steps.short_sha.outputs.SHORT_SHA }} # Image Updated on $DATETIME/" ../deploy/dev_values_sso.yaml + sed -i "s/apitag: .*/apitag: dev-${{ steps.short_sha.outputs.SHORT_SHA }} # Image Updated on $DATETIME/" diam-sso/values.yaml + + # Commit and push the changes + git config --global user.email "actions@github.com" + git config --global user.name "GitHub Actions" + + git add . + + git add ../deploy/dev_values.yaml + + # Repackage Helm Chart + + cd frontend + + helm dependency build + + git add . + + git commit -m "Update Dev API image tag" + git push origin develop # Update the branch name as needed \ No newline at end of file diff --git a/.github/workflows/build-push-webapi.yml b/.github/workflows/build-push-webapi.yml new file mode 100644 index 00000000..72a7a5a6 --- /dev/null +++ b/.github/workflows/build-push-webapi.yml @@ -0,0 +1,86 @@ +name: diam-webapi + +on: + push: + branches: [develop,test,main] + paths: + - "backend/webapi/**" + - ".github/workflows/build-push-webapi.yml" + workflow_dispatch: +env: + IMAGE_NAME: diam-webapi + WORKING_DIRECTORY: ./backend + +jobs: + build: + runs-on: ubuntu-latest + if: github.event_name == 'push' + + steps: + - uses: actions/checkout@v3 + + - name: Branch name + run: echo running on branch ${GITHUB_REF##*/} + + - name: Login to Artifactory + uses: docker/login-action@v1 + with: + registry: artifacts.developer.gov.bc.ca + username: ${{ secrets.ARTIFACTORY_USERNAME }} + password: ${{ secrets.ARTIFACTORY_PASSWORD }} + + - name: Build Image + working-directory: ${{env.WORKING_DIRECTORY}} + run: | + docker build -t artifacts.developer.gov.bc.ca/de27-general-docker/${{env.IMAGE_NAME}}:${GITHUB_REF##*/} -f Dockerfile.WebApi . + + - name: Docker Push to Artifactory + run: | + docker push artifacts.developer.gov.bc.ca/de27-general-docker/${{env.IMAGE_NAME}}:${GITHUB_REF##*/} + + - name: Checkout ArgoCD Repo + id: gitops + if: steps.publish.outcome == 'success' + uses: actions/checkout@v4 + with: + repository: bcgov-c/tenant-gitops-e27db1 + ref: develop + token: ${{ secrets.ARGO_PAT }} # access token + path: gitops + + - name: Update Helm Values and Commit + id: helm + if: steps.gitops.outcome == 'success' # Only run if the previous step (publish) was successful + run: | + + echo "Updating helm values to trigger ArgoCD deployment " + + # Navigate to the directory containing your Helm values file for the environment develop -> DEV, test -> test + cd gitops/charts + + # Update the Helm values file with the new image tag and version + DATETIME=$(date +'%Y-%m-%d %H:%M:%S') # Get current date and time + echo "Updating tag apitag: to ${{ steps.short_sha.outputs.SHORT_SHA }}" + + sed -i "s/apitag: .*/apitag: dev-${{ steps.short_sha.outputs.SHORT_SHA }} # Image Updated on $DATETIME/" ../deploy/dev_values.yaml + sed -i "s/apitag: .*/apitag: dev-${{ steps.short_sha.outputs.SHORT_SHA }} # Image Updated on $DATETIME/" webapi/values.yaml + + # Commit and push the changes + git config --global user.email "actions@github.com" + git config --global user.name "GitHub Actions" + + git add . + + git add ../deploy/dev_values.yaml + + # Repackage Helm Chart + + cd webapi + + helm dependency build + + git add . + + git commit -m "Update Dev API image tag" + git push origin develop # Update the branch name as needed + \ No newline at end of file From 8ed3cbcc32bd2ccb640e19ca338cf8b2496772f0 Mon Sep 17 00:00:00 2001 From: Lee Wright <258036@NTTDATA.COM> Date: Sat, 11 May 2024 12:41:47 -0700 Subject: [PATCH 02/21] prod docker updates --- diam-admin-ui/Dockerfile | 17 +++++++++++++++-- workspace/Dockerfile.frontend | 21 +++++++++++++++++++++ 2 files changed, 36 insertions(+), 2 deletions(-) create mode 100644 workspace/Dockerfile.frontend diff --git a/diam-admin-ui/Dockerfile b/diam-admin-ui/Dockerfile index 675a2627..c80aff1e 100644 --- a/diam-admin-ui/Dockerfile +++ b/diam-admin-ui/Dockerfile @@ -1,8 +1,21 @@ -FROM public.ecr.aws/bitnami/nginx:1.24 +FROM node:lts-alpine as build WORKDIR /app -COPY ./dist /app/. +# Copy the package.json and install dependencies +COPY package*.json /app/ + +RUN npm install + +COPY ./ /app/ + +RUN npm run build + +RUN ls -l / + +FROM docker.io/bitnami/nginx:1.25 + +COPY --from=build /app/dist /app/. COPY diam-bcps-admin.conf /opt/bitnami/nginx/conf/server_blocks/ EXPOSE 8080 diff --git a/workspace/Dockerfile.frontend b/workspace/Dockerfile.frontend new file mode 100644 index 00000000..7a58e51f --- /dev/null +++ b/workspace/Dockerfile.frontend @@ -0,0 +1,21 @@ +FROM node:lts-alpine as build + +WORKDIR /app + +# Copy the package.json and install dependencies +COPY package*.json /app/ + +RUN yarn install + +COPY ./ /app/ + +RUN yarn build --prod --verbose + +RUN ls -l /app + +FROM docker.io/bitnami/nginx:1.25 + +COPY --from=build /app/dist/apps/pidp /app/. +COPY fe-nginx-sb.conf /opt/bitnami/nginx/conf/server_blocks/ + +EXPOSE 8080 From e1350aaadeec293d933111e4d66dee4460433f9f Mon Sep 17 00:00:00 2001 From: Lee Wright <258036@NTTDATA.COM> Date: Wed, 15 May 2024 15:49:14 -0700 Subject: [PATCH 03/21] Sample code for SNS/SQS services --- .../Configuration/PublisherOptions.cs | 9 ++ .../Configuration/SubscriberOptions.cs | 8 ++ .../Controllers/AmazonMessagingController.cs | 118 ++++++++++++++++++ .../Models/DisclosureEventModel.cs | 29 +++++ .../edt.notifications/Models/EventModel.cs | 16 +++ backend/edt.notifications/Program.cs | 50 ++++++++ .../SNS/Producer/ISNSProducer.cs | 10 ++ .../SNS/Producer/SNSProducer.cs | 83 ++++++++++++ .../SNS/Subscriber/ISQSSubscriber.cs | 12 ++ .../SNS/Subscriber/SQSSubscriber.cs | 91 ++++++++++++++ backend/edt.notifications/appsettings.json | 20 +++ .../edt.notifications.csproj | 23 ++++ .../edt.notifications/edt.notifications.http | 6 + 13 files changed, 475 insertions(+) create mode 100644 backend/edt.notifications/Configuration/PublisherOptions.cs create mode 100644 backend/edt.notifications/Configuration/SubscriberOptions.cs create mode 100644 backend/edt.notifications/Controllers/AmazonMessagingController.cs create mode 100644 backend/edt.notifications/Models/DisclosureEventModel.cs create mode 100644 backend/edt.notifications/Models/EventModel.cs create mode 100644 backend/edt.notifications/Program.cs create mode 100644 backend/edt.notifications/SNS/Producer/ISNSProducer.cs create mode 100644 backend/edt.notifications/SNS/Producer/SNSProducer.cs create mode 100644 backend/edt.notifications/SNS/Subscriber/ISQSSubscriber.cs create mode 100644 backend/edt.notifications/SNS/Subscriber/SQSSubscriber.cs create mode 100644 backend/edt.notifications/appsettings.json create mode 100644 backend/edt.notifications/edt.notifications.csproj create mode 100644 backend/edt.notifications/edt.notifications.http diff --git a/backend/edt.notifications/Configuration/PublisherOptions.cs b/backend/edt.notifications/Configuration/PublisherOptions.cs new file mode 100644 index 00000000..def1987d --- /dev/null +++ b/backend/edt.notifications/Configuration/PublisherOptions.cs @@ -0,0 +1,9 @@ +namespace edt.notifications.Configuration; + +public class PublisherOptions +{ + public const string Publisher = "Publisher"; + + public string SNSTarget { get; set; } + +} diff --git a/backend/edt.notifications/Configuration/SubscriberOptions.cs b/backend/edt.notifications/Configuration/SubscriberOptions.cs new file mode 100644 index 00000000..1d6631d8 --- /dev/null +++ b/backend/edt.notifications/Configuration/SubscriberOptions.cs @@ -0,0 +1,8 @@ +namespace edt.notifications.Configuration; + +public class SubscriberOptions +{ + public const string Subscriber = "Subscriber"; + + public string SQSUrl { get; set; } +} diff --git a/backend/edt.notifications/Controllers/AmazonMessagingController.cs b/backend/edt.notifications/Controllers/AmazonMessagingController.cs new file mode 100644 index 00000000..cb20cd1c --- /dev/null +++ b/backend/edt.notifications/Controllers/AmazonMessagingController.cs @@ -0,0 +1,118 @@ +namespace edt.notifications.Controllers; + +using System.Text.Json; +using System.Text.Json.Serialization; +using Amazon.SimpleNotificationService; +using Amazon.SimpleNotificationService.Model; +using edt.notifications.Configuration; +using edt.notifications.Models; +using edt.notifications.SNS.Producer; +using edt.notifications.SNS.Subscriber; +using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Configuration; +using Newtonsoft.Json.Linq; + +[ApiController] +[Route("[controller]")] +public class AmazonMessagingController : ControllerBase +{ + + private readonly ILogger logger; + private IConfiguration configuration; + private ISQSSubscriber subscriber; + private ISNSProducer producer; + private JsonSerializerOptions jsonSerializerOptions; + + public AmazonMessagingController(ILogger logger, IConfiguration configuration, ISQSSubscriber subscriber, ISNSProducer producer) + { + this.logger = logger; + this.configuration = configuration; + this.subscriber = subscriber; + this.producer = producer; + this.jsonSerializerOptions = new JsonSerializerOptions + { + Converters = { + new JsonStringEnumConverter() } + }; + } + + public static async Task PublishToTopicAsync( + IAmazonSimpleNotificationService client, + string topicArn, + string messageText) + { + var request = new PublishRequest + { + TopicArn = topicArn, + Message = messageText, + }; + + var response = await client.PublishAsync(request); + + Console.WriteLine($"Successfully published message ID: {response.MessageId}"); + } + + + /// + /// Post a message to the topic + /// + /// + /// + [ProducesResponseType(StatusCodes.Status201Created)] + [ProducesResponseType(StatusCodes.Status400BadRequest)] + [HttpPost("/submit-request", Name = "PublishToSNS")] + public async Task PublishToSNSTopic(DisclosureEventModel eventModel) + { + var response = await this.producer.ProduceAsync(eventModel); + + return response; + } + + /// + /// Get Messages from the topic - coded to pickup from settings + /// + /// + [HttpGet("/messages", Name = "GetMessages")] + public async Task> GetMessagesAsync() + { + var messages = new List(); + var receiptHandles = new List(); + try + { + var subscriberOptions = new SubscriberOptions(); + this.configuration.GetSection(SubscriberOptions.Subscriber).Bind(subscriberOptions); + + + var messageResponse = await this.subscriber.GetMessages(subscriberOptions.SQSUrl, 10); + messageResponse.Messages.ForEach(msg => + { + var msgBody = msg.Body; + var json = JObject.Parse(msgBody); + var content = json["Message"].ToString(); + var eventModel = JsonSerializer.Deserialize(content, this.jsonSerializerOptions); + messages.Add(eventModel); + + receiptHandles.Add(msg.ReceiptHandle); + }); + + + // tell subscriber I'm done with these + await this.subscriber.AcknowledgeMessagesAsync(subscriberOptions.SQSUrl, receiptHandles); + + } + catch (Exception ex) + { + this.logger.LogError($"Error {ex.Message}"); + } + return messages; + } + + + + [HttpGet("/topics", Name = "GetTopics")] + public async Task> GetTopicsAsync() => await this.producer.ListAllTopicsAsync(); + + [HttpGet("/queues", Name = "GetQueues")] + public async Task> GetQueuesAsync() => await this.subscriber.ListQueuesAsync(); + +} diff --git a/backend/edt.notifications/Models/DisclosureEventModel.cs b/backend/edt.notifications/Models/DisclosureEventModel.cs new file mode 100644 index 00000000..7242a7a5 --- /dev/null +++ b/backend/edt.notifications/Models/DisclosureEventModel.cs @@ -0,0 +1,29 @@ +namespace edt.notifications.Models; + +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; + +public class DisclosureEventModel : EventModel +{ + public DisclosureEventType DisclosureEventType { get; set; } = DisclosureEventType.ExportToParticipant; + public int PersonId { get; set; } + public int FromCaseId { get; set; } + public int ToCaseId { get; set; } + public int ToInstanceId { get; set; } + public string PersonKey { get; set; } = string.Empty; + public DisclosureParticipantType DisclosureParticipantType { get; set; } = DisclosureParticipantType.Accused; +} + +[JsonConverter(typeof(StringEnumConverter))] +public enum DisclosureEventType +{ + ExportToParticipant, + ExportToParticipantDeleted +} + +[JsonConverter(typeof(StringEnumConverter))] +public enum DisclosureParticipantType +{ + Accused, + DefenceCounsel +} diff --git a/backend/edt.notifications/Models/EventModel.cs b/backend/edt.notifications/Models/EventModel.cs new file mode 100644 index 00000000..3dd9bba8 --- /dev/null +++ b/backend/edt.notifications/Models/EventModel.cs @@ -0,0 +1,16 @@ +namespace edt.notifications.Models; +using Newtonsoft.Json; + + +public abstract class EventModel +{ + public int Id { get; set; } + public string CreatedByUsername { get; set; } = string.Empty; + public DateTime CreatedUtc { get; set; } + + public string AsJSON() + { + var json = JsonConvert.SerializeObject(this); + return json; + } +} diff --git a/backend/edt.notifications/Program.cs b/backend/edt.notifications/Program.cs new file mode 100644 index 00000000..65ca8546 --- /dev/null +++ b/backend/edt.notifications/Program.cs @@ -0,0 +1,50 @@ + +namespace edt.notifications; + +using System.Text.Json.Serialization; +using edt.notifications.Configuration; +using edt.notifications.SNS.Producer; +using edt.notifications.SNS.Subscriber; + +public class Program +{ + public static void Main(string[] args) + { + var builder = WebApplication.CreateBuilder(args); + + + + // Add services to the container. + builder.Services.Configure( + builder.Configuration.GetSection(PublisherOptions.Publisher)); + builder.Services.AddControllers().AddJsonOptions(opts => + { + var enumConverter = new JsonStringEnumConverter(); + opts.JsonSerializerOptions.Converters.Add(enumConverter); + }); + // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle + builder.Services.AddEndpointsApiExplorer(); + builder.Services.AddSwaggerGen(); + + builder.Services.AddSingleton(); + builder.Services.AddSingleton(); + + var app = builder.Build(); + + + + // Configure the HTTP request pipeline. + if (app.Environment.IsDevelopment()) + { + app.UseSwagger(); + app.UseSwaggerUI(); + } + + app.UseHttpsRedirection(); + app.UseAuthorization(); + + app.MapControllers(); + + app.Run(); + } +} diff --git a/backend/edt.notifications/SNS/Producer/ISNSProducer.cs b/backend/edt.notifications/SNS/Producer/ISNSProducer.cs new file mode 100644 index 00000000..0ad36083 --- /dev/null +++ b/backend/edt.notifications/SNS/Producer/ISNSProducer.cs @@ -0,0 +1,10 @@ +namespace edt.notifications.SNS.Producer; + +using Amazon.SimpleNotificationService.Model; +using edt.notifications.Models; + +public interface ISNSProducer +{ + Task ProduceAsync(EventModel eventModel); + Task> ListAllTopicsAsync(); +} diff --git a/backend/edt.notifications/SNS/Producer/SNSProducer.cs b/backend/edt.notifications/SNS/Producer/SNSProducer.cs new file mode 100644 index 00000000..8b9af9c8 --- /dev/null +++ b/backend/edt.notifications/SNS/Producer/SNSProducer.cs @@ -0,0 +1,83 @@ +namespace edt.notifications.SNS.Producer; + +using System.Collections.Generic; +using Amazon; +using Amazon.Runtime.CredentialManagement; +using Amazon.SimpleNotificationService; +using Amazon.SimpleNotificationService.Model; +using edt.notifications.Configuration; +using edt.notifications.Models; + +public class SNSProducer : ISNSProducer +{ + private ILogger logger; + private AmazonSimpleNotificationServiceClient client; + private readonly IConfiguration configuration; + + public SNSProducer() + { + } + + + + public SNSProducer(ILogger logger, IConfiguration configuration) + { + this.logger = logger; + this.configuration = configuration; + var options = this.configuration.GetAWSOptions(); + var credentialProfileStoreChain = new CredentialProfileStoreChain(); + if (credentialProfileStoreChain.TryGetAWSCredentials(options.Profile, out var credentials)) + { + options.Credentials = credentials; + } + + this.client = new AmazonSimpleNotificationServiceClient(options.Credentials, RegionEndpoint.CACentral1); + + + } + + public async Task ProduceAsync(EventModel eventModel) + { + var attributes = new Dictionary(); + + var filterType = (eventModel is DisclosureEventModel model) ? model.DisclosureEventType.ToString() : "unknown"; + var value = new MessageAttributeValue + { + DataType = "String", + StringValue = filterType + }; + + attributes.Add("EventType", value); + + var publisherOptions = new PublisherOptions(); + this.configuration.GetSection(PublisherOptions.Publisher).Bind(publisherOptions); + + var publishRequest = new PublishRequest + { + Message = eventModel.AsJSON(), + MessageAttributes = attributes, + Subject = "Disclosure Test", + TopicArn = publisherOptions.SNSTarget + }; + return await this.client.PublishAsync(publishRequest); + } + + + + + /// + /// Get all topic names + /// + /// + public async Task> ListAllTopicsAsync() + { + var topics = await this.client.ListTopicsAsync(); + topics.Topics.ForEach(topic => + { + this.logger.LogInformation($"Topic {topic.TopicArn}"); + }); + + return topics.Topics.Select(t => t.TopicArn.ToString()).ToList(); + + } +} diff --git a/backend/edt.notifications/SNS/Subscriber/ISQSSubscriber.cs b/backend/edt.notifications/SNS/Subscriber/ISQSSubscriber.cs new file mode 100644 index 00000000..7e806dff --- /dev/null +++ b/backend/edt.notifications/SNS/Subscriber/ISQSSubscriber.cs @@ -0,0 +1,12 @@ +namespace edt.notifications.SNS.Subscriber; + +using System.Threading.Tasks; +using Amazon.SQS.Model; + +public interface ISQSSubscriber +{ + Task GetMessages(string qUrl, int waitTime); + Task> ListQueuesAsync(); + Task AcknowledgeMessagesAsync(string qUrl, List receiptHandles); + +} diff --git a/backend/edt.notifications/SNS/Subscriber/SQSSubscriber.cs b/backend/edt.notifications/SNS/Subscriber/SQSSubscriber.cs new file mode 100644 index 00000000..321d6ac6 --- /dev/null +++ b/backend/edt.notifications/SNS/Subscriber/SQSSubscriber.cs @@ -0,0 +1,91 @@ +namespace edt.notifications.SNS.Subscriber; + +using System.Collections.Generic; +using Amazon; +using Amazon.Runtime.CredentialManagement; +using Amazon.SQS; +using Amazon.SQS.Model; + +public class SQSSubscriber : ISQSSubscriber +{ + private int MaxMessages = 10; + private ILogger logger; + private IAmazonSQS client; + private readonly IConfiguration configuration; + + public SQSSubscriber() + { + } + + public SQSSubscriber(ILogger logger, IConfiguration configuration) + { + this.MaxMessages = MaxMessages; + this.logger = logger; + this.configuration = configuration; + var options = this.configuration.GetAWSOptions(); + var credentialProfileStoreChain = new CredentialProfileStoreChain(); + if (credentialProfileStoreChain.TryGetAWSCredentials(options.Profile, out var credentials)) + { + options.Credentials = credentials; + } + this.client = new AmazonSQSClient(options.Credentials, RegionEndpoint.CACentral1); + this.configuration = configuration; + } + + public async Task GetMessages( + string qUrl, int waitTime = 0) + { + logger.LogInformation($"Getting messages from {qUrl}"); + + try + { + var reponse = await client.ReceiveMessageAsync(new ReceiveMessageRequest + { + QueueUrl = qUrl, + MaxNumberOfMessages = MaxMessages, + WaitTimeSeconds = waitTime + // (Could also request attributes, set visibility timeout, etc.) + }); + + logger.LogInformation($"Response message count {reponse.Messages.Count}"); + + return reponse; + } + catch (Exception ex) + { + logger.LogError($"Failed to get messages {ex.Message}", ex); + return null; + } + } + + + + /// + /// List available queues + /// + /// + public async Task> ListQueuesAsync() + { + var request = new ListQueuesRequest + { + MaxResults = MaxMessages + }; + var response = await client.ListQueuesAsync(request); + return response.QueueUrls; + + } + + public async Task AcknowledgeMessagesAsync(string qUrl, List receiptHandles) + { + foreach (var receiptHandle in receiptHandles) + { + var response = await this.client.DeleteMessageAsync(qUrl, receiptHandle); + if (response != null) + { + this.logger.LogInformation($"Delete response {response.HttpStatusCode}"); + } + } + + return true; + } +} diff --git a/backend/edt.notifications/appsettings.json b/backend/edt.notifications/appsettings.json new file mode 100644 index 00000000..ef730309 --- /dev/null +++ b/backend/edt.notifications/appsettings.json @@ -0,0 +1,20 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + }, + "AWS": { + "Profile": "nimbus", + "Region": "ca-central-1", + "ProfilesLocation": "c:\\AWS\\credentials" + }, + "Publisher": { + "SNSTarget": "" + }, + "Subscriber": { + "SQSUrl": "" + }, + "AllowedHosts": "*" +} diff --git a/backend/edt.notifications/edt.notifications.csproj b/backend/edt.notifications/edt.notifications.csproj new file mode 100644 index 00000000..74cb4895 --- /dev/null +++ b/backend/edt.notifications/edt.notifications.csproj @@ -0,0 +1,23 @@ + + + + net8.0 + enable + 1.1.5 + Linux + enable + + + + + + + + + + + + + + + diff --git a/backend/edt.notifications/edt.notifications.http b/backend/edt.notifications/edt.notifications.http new file mode 100644 index 00000000..2260d696 --- /dev/null +++ b/backend/edt.notifications/edt.notifications.http @@ -0,0 +1,6 @@ +@edt.notifications_HostAddress = http://localhost:5261 + +GET {{edt.notifications_HostAddress}}/weatherforecast/ +Accept: application/json + +### From f38405c3041095b75a60cba630e6072da040a077 Mon Sep 17 00:00:00 2001 From: Lee Wright <258036@NTTDATA.COM> Date: Thu, 16 May 2024 13:23:59 -0700 Subject: [PATCH 04/21] Add EF and refactor names --- .../AWS/Producer/ISNSProducer.cs | 10 + .../AWS/Producer/SNSProducer.cs | 83 +++++++ .../AWS/Subscriber/ISQSSubscriber.cs | 12 + .../AWS/Subscriber/SQSSubscriber.cs | 211 ++++++++++++++++++ .../Configuration/KafkaTargetOptions.cs | 14 ++ .../Configuration/PublisherOptions.cs | 9 + .../Configuration/SubscriberOptions.cs | 8 + .../Controllers/AmazonMessagingController.cs | 90 ++++++++ .../Data/MessagingAdapterContext.cs | 21 ++ .../MessagingAdapter/MessagingAdapter.csproj | 20 ++ .../20240516180359_InitialCreate.Designer.cs | 55 +++++ .../20240516180359_InitialCreate.cs | 43 ++++ .../MessagingAdapterContextModelSnapshot.cs | 52 +++++ .../Models/DisclosureEventModel.cs | 29 +++ backend/MessagingAdapter/Models/EventModel.cs | 16 ++ .../Models/IdempotentConsumer.cs | 13 ++ backend/MessagingAdapter/Program.cs | 68 ++++++ backend/MessagingAdapter/README.md | 8 + backend/MessagingAdapter/appsettings.json | 32 +++ .../MessagingAdapter/edt.notifications.http | 6 + 20 files changed, 800 insertions(+) create mode 100644 backend/MessagingAdapter/AWS/Producer/ISNSProducer.cs create mode 100644 backend/MessagingAdapter/AWS/Producer/SNSProducer.cs create mode 100644 backend/MessagingAdapter/AWS/Subscriber/ISQSSubscriber.cs create mode 100644 backend/MessagingAdapter/AWS/Subscriber/SQSSubscriber.cs create mode 100644 backend/MessagingAdapter/Configuration/KafkaTargetOptions.cs create mode 100644 backend/MessagingAdapter/Configuration/PublisherOptions.cs create mode 100644 backend/MessagingAdapter/Configuration/SubscriberOptions.cs create mode 100644 backend/MessagingAdapter/Controllers/AmazonMessagingController.cs create mode 100644 backend/MessagingAdapter/Data/MessagingAdapterContext.cs create mode 100644 backend/MessagingAdapter/MessagingAdapter.csproj create mode 100644 backend/MessagingAdapter/Migrations/20240516180359_InitialCreate.Designer.cs create mode 100644 backend/MessagingAdapter/Migrations/20240516180359_InitialCreate.cs create mode 100644 backend/MessagingAdapter/Migrations/MessagingAdapterContextModelSnapshot.cs create mode 100644 backend/MessagingAdapter/Models/DisclosureEventModel.cs create mode 100644 backend/MessagingAdapter/Models/EventModel.cs create mode 100644 backend/MessagingAdapter/Models/IdempotentConsumer.cs create mode 100644 backend/MessagingAdapter/Program.cs create mode 100644 backend/MessagingAdapter/README.md create mode 100644 backend/MessagingAdapter/appsettings.json create mode 100644 backend/MessagingAdapter/edt.notifications.http diff --git a/backend/MessagingAdapter/AWS/Producer/ISNSProducer.cs b/backend/MessagingAdapter/AWS/Producer/ISNSProducer.cs new file mode 100644 index 00000000..38dca656 --- /dev/null +++ b/backend/MessagingAdapter/AWS/Producer/ISNSProducer.cs @@ -0,0 +1,10 @@ +namespace MessagingAdapter.AWS.Producer; + +using Amazon.SimpleNotificationService.Model; +using MessagingAdapter.Models; + +public interface ISNSProducer +{ + Task ProduceAsync(EventModel eventModel); + Task> ListAllTopicsAsync(); +} diff --git a/backend/MessagingAdapter/AWS/Producer/SNSProducer.cs b/backend/MessagingAdapter/AWS/Producer/SNSProducer.cs new file mode 100644 index 00000000..6ade6a36 --- /dev/null +++ b/backend/MessagingAdapter/AWS/Producer/SNSProducer.cs @@ -0,0 +1,83 @@ +namespace MessagingAdapter.AWS.Producer; + +using System.Collections.Generic; +using Amazon; +using Amazon.Runtime.CredentialManagement; +using Amazon.SimpleNotificationService; +using Amazon.SimpleNotificationService.Model; +using MessagingAdapter.Configuration; +using MessagingAdapter.Models; + +public class SNSProducer : ISNSProducer +{ + private ILogger logger; + private AmazonSimpleNotificationServiceClient client; + private readonly IConfiguration configuration; + + public SNSProducer() + { + } + + + + public SNSProducer(ILogger logger, IConfiguration configuration) + { + this.logger = logger; + this.configuration = configuration; + var options = this.configuration.GetAWSOptions(); + var credentialProfileStoreChain = new CredentialProfileStoreChain(); + if (credentialProfileStoreChain.TryGetAWSCredentials(options.Profile, out var credentials)) + { + options.Credentials = credentials; + } + + this.client = new AmazonSimpleNotificationServiceClient(options.Credentials, RegionEndpoint.CACentral1); + + + } + + public async Task ProduceAsync(EventModel eventModel) + { + var attributes = new Dictionary(); + + var filterType = (eventModel is DisclosureEventModel model) ? model.DisclosureEventType.ToString() : "unknown"; + var value = new MessageAttributeValue + { + DataType = "String", + StringValue = filterType + }; + + attributes.Add("EventType", value); + + var publisherOptions = new PublisherOptions(); + this.configuration.GetSection(PublisherOptions.Publisher).Bind(publisherOptions); + + var publishRequest = new PublishRequest + { + Message = eventModel.AsJSON(), + MessageAttributes = attributes, + Subject = "Disclosure Test", + TopicArn = publisherOptions.SNSTarget + }; + return await this.client.PublishAsync(publishRequest); + } + + + + + /// + /// Get all topic names + /// + /// + public async Task> ListAllTopicsAsync() + { + var topics = await this.client.ListTopicsAsync(); + topics.Topics.ForEach(topic => + { + this.logger.LogInformation($"Topic {topic.TopicArn}"); + }); + + return topics.Topics.Select(t => t.TopicArn.ToString()).ToList(); + + } +} diff --git a/backend/MessagingAdapter/AWS/Subscriber/ISQSSubscriber.cs b/backend/MessagingAdapter/AWS/Subscriber/ISQSSubscriber.cs new file mode 100644 index 00000000..fdc1daa6 --- /dev/null +++ b/backend/MessagingAdapter/AWS/Subscriber/ISQSSubscriber.cs @@ -0,0 +1,12 @@ +namespace MessagingAdapter.AWS.Subscriber; + +using System.Threading.Tasks; +using MessagingAdapter.Models; + +public interface ISQSSubscriber +{ + Task> GetMessages(); + Task> ListQueuesAsync(); + Task AcknowledgeMessagesAsync(string qUrl, Dictionary receiptHandles); + +} diff --git a/backend/MessagingAdapter/AWS/Subscriber/SQSSubscriber.cs b/backend/MessagingAdapter/AWS/Subscriber/SQSSubscriber.cs new file mode 100644 index 00000000..963e58ae --- /dev/null +++ b/backend/MessagingAdapter/AWS/Subscriber/SQSSubscriber.cs @@ -0,0 +1,211 @@ +namespace MessagingAdapter.AWS.Subscriber; + +using System.Collections.Generic; +using System.Text.Json; +using System.Text.Json.Serialization; +using Amazon; +using Amazon.Runtime.CredentialManagement; +using Amazon.SQS; +using Amazon.SQS.Model; +using MessagingAdapter.Configuration; +using MessagingAdapter.Data; +using MessagingAdapter.Models; +using Newtonsoft.Json.Linq; + +/// +/// Subscribes to SQS Message Topics and can receive and process messages +/// +public class SQSSubscriber : ISQSSubscriber, IDisposable +{ + private readonly int maxMessages = 1; + private readonly ILogger logger; + private readonly AmazonSQSClient? client; + private readonly IConfiguration configuration; + private readonly JsonSerializerOptions jsonSerializerOptions; + private MessagingAdapterContext dbContext; + + public SQSSubscriber() + { + } + + public SQSSubscriber(ILogger logger, IConfiguration configuration, MessagingAdapterContext dbContext) + { + this.logger = logger; + this.configuration = configuration; + this.dbContext = dbContext; + + var options = this.configuration.GetAWSOptions(); + var credentialProfileStoreChain = new CredentialProfileStoreChain(); + + // get AWS Credentials + if (credentialProfileStoreChain.TryGetAWSCredentials(options.Profile, out var credentials)) + { + options.Credentials = credentials; + } + + // create new AWS SQS Client + this.client = new AmazonSQSClient(options.Credentials, RegionEndpoint.CACentral1); + + + this.configuration = configuration; + + // treat enums as strings not numbers + this.jsonSerializerOptions = new JsonSerializerOptions + { + Converters = { new JsonStringEnumConverter() } + }; + } + + /// + /// Get messages from AWS SQS Topic + /// + /// + /// + /// + public async Task> GetMessages() + { + var messages = new List(); + var receiptHandles = new Dictionary(); + var waitTime = 2; + + + var subscriberOptions = new SubscriberOptions(); + this.configuration.GetSection(SubscriberOptions.Subscriber).Bind(subscriberOptions); + + var qUrl = subscriberOptions.SQSUrl; + + this.logger.LogInformation($"Getting messages from {qUrl}"); + + try + { + + var reponse = await this.client.ReceiveMessageAsync(new ReceiveMessageRequest + { + QueueUrl = qUrl, + MaxNumberOfMessages = this.maxMessages, + WaitTimeSeconds = waitTime + // (Could also request attributes, set visibility timeout, etc.) + }); + + this.logger.LogInformation($"Response message count {reponse.Messages.Count}"); + + reponse.Messages.ForEach(msg => + { + + // check we havent processed this message previously + if (dbContext.IsMessageProcessedAlready(msg.MessageId)) + { + this.logger.LogInformation($"Message {msg.MessageId} already processed"); + } + else + { + + // get message and convert to EventModel object + var msgBody = msg.Body; + var json = JObject.Parse(msgBody); + var content = json["Message"].ToString(); + var eventModel = JsonSerializer.Deserialize(content, this.jsonSerializerOptions); + if (eventModel != null) + { + messages.Add(eventModel); + } + + receiptHandles.Add(msg.MessageId, msg.ReceiptHandle); + } + }); + + // track the messages we've received + await this.TrackRecievedMessages(receiptHandles); + + // tell subscriber I'm done with these + await this.AcknowledgeMessagesAsync(subscriberOptions.SQSUrl, receiptHandles); + + return messages; + } + catch (Exception ex) + { + logger.LogError($"Failed to get messages {ex.Message}", ex); + return null; + } + } + + /// + /// Ensure we track messages so they are only ever processed once + /// + /// + /// + private async Task TrackRecievedMessages(Dictionary messageKeys) + { + var processed = 0; + + var txn = dbContext.Database.BeginTransaction(); + foreach (var messageKey in messageKeys) + { + this.dbContext.IdempotentConsumers.Add(new IdempotentConsumer + { + MessageId = messageKey.Key, + ReceiptId = messageKey.Value, + ProcessedUtc = DateTime.UtcNow, + }); + } + + var changes = await dbContext.SaveChangesAsync(); + + if (changes != messageKeys.Count) + { + this.logger.LogError($"Failed to track all changes count should be {messageKeys.Count} and we stored {changes} - rolling back"); + await txn.RollbackAsync(); + } + else + { + await txn.CommitAsync(); + } + + return processed; + } + + + /// + /// List available queues + /// + /// + public async Task> ListQueuesAsync() + { + var request = new ListQueuesRequest + { + MaxResults = maxMessages + }; + var response = await this.client.ListQueuesAsync(request); + return response.QueueUrls; + + } + + public async Task AcknowledgeMessagesAsync(string qUrl, Dictionary receiptHandles) + { + foreach (var receiptHandle in receiptHandles) + { + logger.LogInformation($"Removing message {receiptHandle.Key}, {receiptHandle.Value}"); + var response = await this.client.DeleteMessageAsync(qUrl, receiptHandle.Value); + if (response != null) + { + this.logger.LogInformation($"Delete response {response.HttpStatusCode}"); + } + } + + return true; + } + + public void Dispose() + { + this.Dispose(true); + GC.SuppressFinalize(this); + } + + protected virtual void Dispose(bool disposing) + { + if (disposing) + { + this.client?.Dispose(); + } + } +} diff --git a/backend/MessagingAdapter/Configuration/KafkaTargetOptions.cs b/backend/MessagingAdapter/Configuration/KafkaTargetOptions.cs new file mode 100644 index 00000000..19f26574 --- /dev/null +++ b/backend/MessagingAdapter/Configuration/KafkaTargetOptions.cs @@ -0,0 +1,14 @@ +namespace MessagingAdapter.Configuration; + +public class KafkaTargetOptions +{ + public const string KafkaTargets = "KafkaTargets"; + public Target[] Targets { get; set; } +} + +public class Target +{ + public string MessageType { get; set; } = string.Empty; + public string TargetTopic { get; set; } = string.Empty; + +} diff --git a/backend/MessagingAdapter/Configuration/PublisherOptions.cs b/backend/MessagingAdapter/Configuration/PublisherOptions.cs new file mode 100644 index 00000000..cc20fa28 --- /dev/null +++ b/backend/MessagingAdapter/Configuration/PublisherOptions.cs @@ -0,0 +1,9 @@ +namespace MessagingAdapter.Configuration; + +public class PublisherOptions +{ + public const string Publisher = "Publisher"; + + public string SNSTarget { get; set; } + +} diff --git a/backend/MessagingAdapter/Configuration/SubscriberOptions.cs b/backend/MessagingAdapter/Configuration/SubscriberOptions.cs new file mode 100644 index 00000000..5a4554e8 --- /dev/null +++ b/backend/MessagingAdapter/Configuration/SubscriberOptions.cs @@ -0,0 +1,8 @@ +namespace MessagingAdapter.Configuration; + +public class SubscriberOptions +{ + public const string Subscriber = "Subscriber"; + + public string SQSUrl { get; set; } +} diff --git a/backend/MessagingAdapter/Controllers/AmazonMessagingController.cs b/backend/MessagingAdapter/Controllers/AmazonMessagingController.cs new file mode 100644 index 00000000..98727ac0 --- /dev/null +++ b/backend/MessagingAdapter/Controllers/AmazonMessagingController.cs @@ -0,0 +1,90 @@ +namespace MessagingAdapter.Controllers; + +using Amazon.SimpleNotificationService; +using Amazon.SimpleNotificationService.Model; +using MessagingAdapter.AWS.Producer; +using MessagingAdapter.AWS.Subscriber; +using MessagingAdapter.Models; +using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Configuration; + +[ApiController] +[Route("[controller]")] +public class AmazonMessagingController : ControllerBase +{ + + private readonly ILogger logger; + private IConfiguration configuration; + private ISQSSubscriber subscriber; + private ISNSProducer producer; + + public AmazonMessagingController(ILogger logger, IConfiguration configuration, ISQSSubscriber subscriber, ISNSProducer producer) + { + this.logger = logger; + this.configuration = configuration; + this.subscriber = subscriber; + this.producer = producer; + + } + + public static async Task PublishToTopicAsync( + IAmazonSimpleNotificationService client, + string topicArn, + string messageText) + { + var request = new PublishRequest + { + TopicArn = topicArn, + Message = messageText, + }; + + var response = await client.PublishAsync(request); + + Console.WriteLine($"Successfully published message ID: {response.MessageId}"); + } + + + /// + /// Post a message to the topic + /// + /// + /// + [ProducesResponseType(StatusCodes.Status201Created)] + [ProducesResponseType(StatusCodes.Status400BadRequest)] + [HttpPost("/submit-request", Name = "PublishToSNS")] + public async Task PublishToSNSTopic(DisclosureEventModel eventModel) + { + var response = await this.producer.ProduceAsync(eventModel); + + return response; + } + + /// + /// Get Messages from the topic - coded to pickup from settings + /// + /// + [HttpGet("/messages", Name = "GetMessages")] + public async Task> GetMessagesAsync() + { + var messages = new List(); + try + { + messages = await this.subscriber.GetMessages(); + + } + catch (Exception ex) + { + this.logger.LogError($"Error {ex.Message}"); + } + return messages; + } + + + + [HttpGet("/topics", Name = "GetTopics")] + public async Task> GetTopicsAsync() => await this.producer.ListAllTopicsAsync(); + + [HttpGet("/queues", Name = "GetQueues")] + public async Task> GetQueuesAsync() => await this.subscriber.ListQueuesAsync(); + +} diff --git a/backend/MessagingAdapter/Data/MessagingAdapterContext.cs b/backend/MessagingAdapter/Data/MessagingAdapterContext.cs new file mode 100644 index 00000000..b8788ac6 --- /dev/null +++ b/backend/MessagingAdapter/Data/MessagingAdapterContext.cs @@ -0,0 +1,21 @@ +namespace MessagingAdapter.Data; + +using MessagingAdapter.Models; +using Microsoft.EntityFrameworkCore; + + +public class MessagingAdapterContext(DbContextOptions options) : DbContext(options) +{ + + public DbSet IdempotentConsumers { get; set; } = default!; + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + modelBuilder.HasDefaultSchema("messaging-adapter"); + base.OnModelCreating(modelBuilder); + + } + + public bool IsMessageProcessedAlready(string messageId) => this.IdempotentConsumers.Where(ic => ic.MessageId == messageId).Any(); + +} diff --git a/backend/MessagingAdapter/MessagingAdapter.csproj b/backend/MessagingAdapter/MessagingAdapter.csproj new file mode 100644 index 00000000..0acfe99a --- /dev/null +++ b/backend/MessagingAdapter/MessagingAdapter.csproj @@ -0,0 +1,20 @@ + + + + net8.0 + enable + 1.1.5 + Linux + enable + + + + + + + + + + + + diff --git a/backend/MessagingAdapter/Migrations/20240516180359_InitialCreate.Designer.cs b/backend/MessagingAdapter/Migrations/20240516180359_InitialCreate.Designer.cs new file mode 100644 index 00000000..a44d099f --- /dev/null +++ b/backend/MessagingAdapter/Migrations/20240516180359_InitialCreate.Designer.cs @@ -0,0 +1,55 @@ +// +using System; +using MessagingAdapter.Data; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; + +#nullable disable + +namespace MessagingAdapter.Migrations +{ + [DbContext(typeof(MessagingAdapterContext))] + [Migration("20240516180359_InitialCreate")] + partial class InitialCreate + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("messaging-adapter") + .HasAnnotation("ProductVersion", "8.0.5") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("MessagingAdapter.Models.IdempotentConsumer", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("MessageId") + .IsRequired() + .HasColumnType("text"); + + b.Property("ProcessedUtc") + .HasColumnType("timestamp with time zone"); + + b.Property("ReceiptId") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("Id"); + + b.ToTable("IdempotentConsumers", "messaging-adapter"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/backend/MessagingAdapter/Migrations/20240516180359_InitialCreate.cs b/backend/MessagingAdapter/Migrations/20240516180359_InitialCreate.cs new file mode 100644 index 00000000..b32a9571 --- /dev/null +++ b/backend/MessagingAdapter/Migrations/20240516180359_InitialCreate.cs @@ -0,0 +1,43 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; + +#nullable disable + +namespace MessagingAdapter.Migrations +{ + /// + public partial class InitialCreate : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.EnsureSchema( + name: "messaging-adapter"); + + migrationBuilder.CreateTable( + name: "IdempotentConsumers", + schema: "messaging-adapter", + columns: table => new + { + Id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + MessageId = table.Column(type: "text", nullable: false), + ReceiptId = table.Column(type: "text", nullable: false), + ProcessedUtc = table.Column(type: "timestamp with time zone", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_IdempotentConsumers", x => x.Id); + }); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "IdempotentConsumers", + schema: "messaging-adapter"); + } + } +} diff --git a/backend/MessagingAdapter/Migrations/MessagingAdapterContextModelSnapshot.cs b/backend/MessagingAdapter/Migrations/MessagingAdapterContextModelSnapshot.cs new file mode 100644 index 00000000..799d1863 --- /dev/null +++ b/backend/MessagingAdapter/Migrations/MessagingAdapterContextModelSnapshot.cs @@ -0,0 +1,52 @@ +// +using System; +using MessagingAdapter.Data; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; + +#nullable disable + +namespace MessagingAdapter.Migrations +{ + [DbContext(typeof(MessagingAdapterContext))] + partial class MessagingAdapterContextModelSnapshot : ModelSnapshot + { + protected override void BuildModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("messaging-adapter") + .HasAnnotation("ProductVersion", "8.0.5") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("MessagingAdapter.Models.IdempotentConsumer", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("MessageId") + .IsRequired() + .HasColumnType("text"); + + b.Property("ProcessedUtc") + .HasColumnType("timestamp with time zone"); + + b.Property("ReceiptId") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("Id"); + + b.ToTable("IdempotentConsumers", "messaging-adapter"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/backend/MessagingAdapter/Models/DisclosureEventModel.cs b/backend/MessagingAdapter/Models/DisclosureEventModel.cs new file mode 100644 index 00000000..8f8b9fd7 --- /dev/null +++ b/backend/MessagingAdapter/Models/DisclosureEventModel.cs @@ -0,0 +1,29 @@ +namespace MessagingAdapter.Models; + +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; + +public class DisclosureEventModel : EventModel +{ + public DisclosureEventType DisclosureEventType { get; set; } = DisclosureEventType.ExportToParticipant; + public int PersonId { get; set; } + public int FromCaseId { get; set; } + public int ToCaseId { get; set; } + public int ToInstanceId { get; set; } + public string PersonKey { get; set; } = string.Empty; + public DisclosureParticipantType DisclosureParticipantType { get; set; } = DisclosureParticipantType.Accused; +} + +[JsonConverter(typeof(StringEnumConverter))] +public enum DisclosureEventType +{ + ExportToParticipant, + ExportToParticipantDeleted +} + +[JsonConverter(typeof(StringEnumConverter))] +public enum DisclosureParticipantType +{ + Accused, + DefenceCounsel +} diff --git a/backend/MessagingAdapter/Models/EventModel.cs b/backend/MessagingAdapter/Models/EventModel.cs new file mode 100644 index 00000000..cdb683bf --- /dev/null +++ b/backend/MessagingAdapter/Models/EventModel.cs @@ -0,0 +1,16 @@ +namespace MessagingAdapter.Models; +using Newtonsoft.Json; + + +public abstract class EventModel +{ + public int Id { get; set; } + public string CreatedByUsername { get; set; } = string.Empty; + public DateTime CreatedUtc { get; set; } + + public string AsJSON() + { + var json = JsonConvert.SerializeObject(this); + return json; + } +} diff --git a/backend/MessagingAdapter/Models/IdempotentConsumer.cs b/backend/MessagingAdapter/Models/IdempotentConsumer.cs new file mode 100644 index 00000000..0d8ebb96 --- /dev/null +++ b/backend/MessagingAdapter/Models/IdempotentConsumer.cs @@ -0,0 +1,13 @@ +namespace MessagingAdapter.Models; + +using System.ComponentModel.DataAnnotations; + +public class IdempotentConsumer +{ + [Key] + public int Id { get; set; } + public string MessageId { get; set; } = string.Empty; + public string ReceiptId { get; set; } = string.Empty; + public DateTime ProcessedUtc { get; set; } +} + diff --git a/backend/MessagingAdapter/Program.cs b/backend/MessagingAdapter/Program.cs new file mode 100644 index 00000000..d6fa0361 --- /dev/null +++ b/backend/MessagingAdapter/Program.cs @@ -0,0 +1,68 @@ + +namespace MessagingAdapter; + +using System.Text.Json.Serialization; +using MessagingAdapter.AWS.Producer; +using MessagingAdapter.AWS.Subscriber; +using MessagingAdapter.Configuration; +using MessagingAdapter.Data; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Migrations; + +public class Program +{ + private const string DbConnection = "DataStoreConnection"; + + public static void Main(string[] args) + { + var builder = WebApplication.CreateBuilder(args); + + + + // Add services to the container. + builder.Services.Configure( + builder.Configuration.GetSection(PublisherOptions.Publisher)); + builder.Services.AddControllers().AddJsonOptions(opts => + { + var enumConverter = new JsonStringEnumConverter(); + opts.JsonSerializerOptions.Converters.Add(enumConverter); + }); + // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle + builder.Services.AddEndpointsApiExplorer(); + builder.Services.AddSwaggerGen(); + + + + var dbConnection = builder.Configuration.GetValue(DbConnection); + + + builder.Services.AddDbContext(options => options + .UseNpgsql(dbConnection, npg => + { + npg.MigrationsHistoryTable(HistoryRepository.DefaultTableName, "messaging-adapter"); + npg.UseNodaTime(); + }).EnableSensitiveDataLogging(sensitiveDataLoggingEnabled: false)); + + builder.Services.AddScoped(); + builder.Services.AddScoped(); + + + var app = builder.Build(); + + + + // Configure the HTTP request pipeline. + if (app.Environment.IsDevelopment()) + { + app.UseSwagger(); + app.UseSwaggerUI(); + } + + app.UseHttpsRedirection(); + app.UseAuthorization(); + + app.MapControllers(); + + app.Run(); + } +} diff --git a/backend/MessagingAdapter/README.md b/backend/MessagingAdapter/README.md new file mode 100644 index 00000000..a925d2a9 --- /dev/null +++ b/backend/MessagingAdapter/README.md @@ -0,0 +1,8 @@ +# DIAM Notification Adapter + +## Process incoming AWS messages and adapt and produce to internal message bus + +This application will receive messages from AWS SQS (and push test messages to SNS). +When a message is received the service will place a new kafka message onto a topic that can then be consumed by other services. + +This separates out the AWS messaging from the DIAM messaging and allows other Justice apps to process those messages from Kafka without having to consume from AWS. diff --git a/backend/MessagingAdapter/appsettings.json b/backend/MessagingAdapter/appsettings.json new file mode 100644 index 00000000..14ccd5f0 --- /dev/null +++ b/backend/MessagingAdapter/appsettings.json @@ -0,0 +1,32 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + }, + "DataStoreConnection": "Host=fedora;Port=5444;Database=messaging-adapter;Username=messaging-adapter;Password=", + "AWS": { + "Profile": "nimbus", + "Region": "ca-central-1" + }, + "KafkaTargets": [ + { + "MessageType": "DisclosureEvent", + "TargetTopic": "edt-incoming-disclosure-event" + } + + ], + "KafkaCluster": { + "BootstrapServers": "", + "SaslOauthbearerTokenEndpointUrl": "", + "SaslOauthbearerProducerClientId": "kafka-producer", + "SaslOauthbearerProducerClientSecret": "", + "SaslOauthbearerConsumerClientId": "kafka-consumer", + "SaslOauthbearerConsumerClientSecret": "", + "SslCaLocation": "C:\\certs\\pidp\\ca.crt", + "SslCertificateLocation": "C:\\certs\\pidp\\client\\ca.crt", + "SslKeyLocation": "C:\\certs\\pidp\\client\\ca.key" + }, + "AllowedHosts": "*" +} diff --git a/backend/MessagingAdapter/edt.notifications.http b/backend/MessagingAdapter/edt.notifications.http new file mode 100644 index 00000000..2260d696 --- /dev/null +++ b/backend/MessagingAdapter/edt.notifications.http @@ -0,0 +1,6 @@ +@edt.notifications_HostAddress = http://localhost:5261 + +GET {{edt.notifications_HostAddress}}/weatherforecast/ +Accept: application/json + +### From 07f9a77cdd900641d9dfa07afec04fadb242c4dd Mon Sep 17 00:00:00 2001 From: Lee Wright <258036@NTTDATA.COM> Date: Thu, 16 May 2024 13:24:32 -0700 Subject: [PATCH 05/21] moved --- .../Configuration/PublisherOptions.cs | 9 -- .../Configuration/SubscriberOptions.cs | 8 -- .../Controllers/AmazonMessagingController.cs | 118 ------------------ .../Models/DisclosureEventModel.cs | 29 ----- .../edt.notifications/Models/EventModel.cs | 16 --- backend/edt.notifications/Program.cs | 50 -------- .../SNS/Producer/ISNSProducer.cs | 10 -- .../SNS/Producer/SNSProducer.cs | 83 ------------ .../SNS/Subscriber/ISQSSubscriber.cs | 12 -- .../SNS/Subscriber/SQSSubscriber.cs | 91 -------------- backend/edt.notifications/appsettings.json | 20 --- .../edt.notifications.csproj | 23 ---- .../edt.notifications/edt.notifications.http | 6 - 13 files changed, 475 deletions(-) delete mode 100644 backend/edt.notifications/Configuration/PublisherOptions.cs delete mode 100644 backend/edt.notifications/Configuration/SubscriberOptions.cs delete mode 100644 backend/edt.notifications/Controllers/AmazonMessagingController.cs delete mode 100644 backend/edt.notifications/Models/DisclosureEventModel.cs delete mode 100644 backend/edt.notifications/Models/EventModel.cs delete mode 100644 backend/edt.notifications/Program.cs delete mode 100644 backend/edt.notifications/SNS/Producer/ISNSProducer.cs delete mode 100644 backend/edt.notifications/SNS/Producer/SNSProducer.cs delete mode 100644 backend/edt.notifications/SNS/Subscriber/ISQSSubscriber.cs delete mode 100644 backend/edt.notifications/SNS/Subscriber/SQSSubscriber.cs delete mode 100644 backend/edt.notifications/appsettings.json delete mode 100644 backend/edt.notifications/edt.notifications.csproj delete mode 100644 backend/edt.notifications/edt.notifications.http diff --git a/backend/edt.notifications/Configuration/PublisherOptions.cs b/backend/edt.notifications/Configuration/PublisherOptions.cs deleted file mode 100644 index def1987d..00000000 --- a/backend/edt.notifications/Configuration/PublisherOptions.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace edt.notifications.Configuration; - -public class PublisherOptions -{ - public const string Publisher = "Publisher"; - - public string SNSTarget { get; set; } - -} diff --git a/backend/edt.notifications/Configuration/SubscriberOptions.cs b/backend/edt.notifications/Configuration/SubscriberOptions.cs deleted file mode 100644 index 1d6631d8..00000000 --- a/backend/edt.notifications/Configuration/SubscriberOptions.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace edt.notifications.Configuration; - -public class SubscriberOptions -{ - public const string Subscriber = "Subscriber"; - - public string SQSUrl { get; set; } -} diff --git a/backend/edt.notifications/Controllers/AmazonMessagingController.cs b/backend/edt.notifications/Controllers/AmazonMessagingController.cs deleted file mode 100644 index cb20cd1c..00000000 --- a/backend/edt.notifications/Controllers/AmazonMessagingController.cs +++ /dev/null @@ -1,118 +0,0 @@ -namespace edt.notifications.Controllers; - -using System.Text.Json; -using System.Text.Json.Serialization; -using Amazon.SimpleNotificationService; -using Amazon.SimpleNotificationService.Model; -using edt.notifications.Configuration; -using edt.notifications.Models; -using edt.notifications.SNS.Producer; -using edt.notifications.SNS.Subscriber; -using Microsoft.AspNetCore.Mvc; -using Microsoft.Extensions.Configuration; -using Newtonsoft.Json.Linq; - -[ApiController] -[Route("[controller]")] -public class AmazonMessagingController : ControllerBase -{ - - private readonly ILogger logger; - private IConfiguration configuration; - private ISQSSubscriber subscriber; - private ISNSProducer producer; - private JsonSerializerOptions jsonSerializerOptions; - - public AmazonMessagingController(ILogger logger, IConfiguration configuration, ISQSSubscriber subscriber, ISNSProducer producer) - { - this.logger = logger; - this.configuration = configuration; - this.subscriber = subscriber; - this.producer = producer; - this.jsonSerializerOptions = new JsonSerializerOptions - { - Converters = { - new JsonStringEnumConverter() } - }; - } - - public static async Task PublishToTopicAsync( - IAmazonSimpleNotificationService client, - string topicArn, - string messageText) - { - var request = new PublishRequest - { - TopicArn = topicArn, - Message = messageText, - }; - - var response = await client.PublishAsync(request); - - Console.WriteLine($"Successfully published message ID: {response.MessageId}"); - } - - - /// - /// Post a message to the topic - /// - /// - /// - [ProducesResponseType(StatusCodes.Status201Created)] - [ProducesResponseType(StatusCodes.Status400BadRequest)] - [HttpPost("/submit-request", Name = "PublishToSNS")] - public async Task PublishToSNSTopic(DisclosureEventModel eventModel) - { - var response = await this.producer.ProduceAsync(eventModel); - - return response; - } - - /// - /// Get Messages from the topic - coded to pickup from settings - /// - /// - [HttpGet("/messages", Name = "GetMessages")] - public async Task> GetMessagesAsync() - { - var messages = new List(); - var receiptHandles = new List(); - try - { - var subscriberOptions = new SubscriberOptions(); - this.configuration.GetSection(SubscriberOptions.Subscriber).Bind(subscriberOptions); - - - var messageResponse = await this.subscriber.GetMessages(subscriberOptions.SQSUrl, 10); - messageResponse.Messages.ForEach(msg => - { - var msgBody = msg.Body; - var json = JObject.Parse(msgBody); - var content = json["Message"].ToString(); - var eventModel = JsonSerializer.Deserialize(content, this.jsonSerializerOptions); - messages.Add(eventModel); - - receiptHandles.Add(msg.ReceiptHandle); - }); - - - // tell subscriber I'm done with these - await this.subscriber.AcknowledgeMessagesAsync(subscriberOptions.SQSUrl, receiptHandles); - - } - catch (Exception ex) - { - this.logger.LogError($"Error {ex.Message}"); - } - return messages; - } - - - - [HttpGet("/topics", Name = "GetTopics")] - public async Task> GetTopicsAsync() => await this.producer.ListAllTopicsAsync(); - - [HttpGet("/queues", Name = "GetQueues")] - public async Task> GetQueuesAsync() => await this.subscriber.ListQueuesAsync(); - -} diff --git a/backend/edt.notifications/Models/DisclosureEventModel.cs b/backend/edt.notifications/Models/DisclosureEventModel.cs deleted file mode 100644 index 7242a7a5..00000000 --- a/backend/edt.notifications/Models/DisclosureEventModel.cs +++ /dev/null @@ -1,29 +0,0 @@ -namespace edt.notifications.Models; - -using Newtonsoft.Json; -using Newtonsoft.Json.Converters; - -public class DisclosureEventModel : EventModel -{ - public DisclosureEventType DisclosureEventType { get; set; } = DisclosureEventType.ExportToParticipant; - public int PersonId { get; set; } - public int FromCaseId { get; set; } - public int ToCaseId { get; set; } - public int ToInstanceId { get; set; } - public string PersonKey { get; set; } = string.Empty; - public DisclosureParticipantType DisclosureParticipantType { get; set; } = DisclosureParticipantType.Accused; -} - -[JsonConverter(typeof(StringEnumConverter))] -public enum DisclosureEventType -{ - ExportToParticipant, - ExportToParticipantDeleted -} - -[JsonConverter(typeof(StringEnumConverter))] -public enum DisclosureParticipantType -{ - Accused, - DefenceCounsel -} diff --git a/backend/edt.notifications/Models/EventModel.cs b/backend/edt.notifications/Models/EventModel.cs deleted file mode 100644 index 3dd9bba8..00000000 --- a/backend/edt.notifications/Models/EventModel.cs +++ /dev/null @@ -1,16 +0,0 @@ -namespace edt.notifications.Models; -using Newtonsoft.Json; - - -public abstract class EventModel -{ - public int Id { get; set; } - public string CreatedByUsername { get; set; } = string.Empty; - public DateTime CreatedUtc { get; set; } - - public string AsJSON() - { - var json = JsonConvert.SerializeObject(this); - return json; - } -} diff --git a/backend/edt.notifications/Program.cs b/backend/edt.notifications/Program.cs deleted file mode 100644 index 65ca8546..00000000 --- a/backend/edt.notifications/Program.cs +++ /dev/null @@ -1,50 +0,0 @@ - -namespace edt.notifications; - -using System.Text.Json.Serialization; -using edt.notifications.Configuration; -using edt.notifications.SNS.Producer; -using edt.notifications.SNS.Subscriber; - -public class Program -{ - public static void Main(string[] args) - { - var builder = WebApplication.CreateBuilder(args); - - - - // Add services to the container. - builder.Services.Configure( - builder.Configuration.GetSection(PublisherOptions.Publisher)); - builder.Services.AddControllers().AddJsonOptions(opts => - { - var enumConverter = new JsonStringEnumConverter(); - opts.JsonSerializerOptions.Converters.Add(enumConverter); - }); - // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle - builder.Services.AddEndpointsApiExplorer(); - builder.Services.AddSwaggerGen(); - - builder.Services.AddSingleton(); - builder.Services.AddSingleton(); - - var app = builder.Build(); - - - - // Configure the HTTP request pipeline. - if (app.Environment.IsDevelopment()) - { - app.UseSwagger(); - app.UseSwaggerUI(); - } - - app.UseHttpsRedirection(); - app.UseAuthorization(); - - app.MapControllers(); - - app.Run(); - } -} diff --git a/backend/edt.notifications/SNS/Producer/ISNSProducer.cs b/backend/edt.notifications/SNS/Producer/ISNSProducer.cs deleted file mode 100644 index 0ad36083..00000000 --- a/backend/edt.notifications/SNS/Producer/ISNSProducer.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace edt.notifications.SNS.Producer; - -using Amazon.SimpleNotificationService.Model; -using edt.notifications.Models; - -public interface ISNSProducer -{ - Task ProduceAsync(EventModel eventModel); - Task> ListAllTopicsAsync(); -} diff --git a/backend/edt.notifications/SNS/Producer/SNSProducer.cs b/backend/edt.notifications/SNS/Producer/SNSProducer.cs deleted file mode 100644 index 8b9af9c8..00000000 --- a/backend/edt.notifications/SNS/Producer/SNSProducer.cs +++ /dev/null @@ -1,83 +0,0 @@ -namespace edt.notifications.SNS.Producer; - -using System.Collections.Generic; -using Amazon; -using Amazon.Runtime.CredentialManagement; -using Amazon.SimpleNotificationService; -using Amazon.SimpleNotificationService.Model; -using edt.notifications.Configuration; -using edt.notifications.Models; - -public class SNSProducer : ISNSProducer -{ - private ILogger logger; - private AmazonSimpleNotificationServiceClient client; - private readonly IConfiguration configuration; - - public SNSProducer() - { - } - - - - public SNSProducer(ILogger logger, IConfiguration configuration) - { - this.logger = logger; - this.configuration = configuration; - var options = this.configuration.GetAWSOptions(); - var credentialProfileStoreChain = new CredentialProfileStoreChain(); - if (credentialProfileStoreChain.TryGetAWSCredentials(options.Profile, out var credentials)) - { - options.Credentials = credentials; - } - - this.client = new AmazonSimpleNotificationServiceClient(options.Credentials, RegionEndpoint.CACentral1); - - - } - - public async Task ProduceAsync(EventModel eventModel) - { - var attributes = new Dictionary(); - - var filterType = (eventModel is DisclosureEventModel model) ? model.DisclosureEventType.ToString() : "unknown"; - var value = new MessageAttributeValue - { - DataType = "String", - StringValue = filterType - }; - - attributes.Add("EventType", value); - - var publisherOptions = new PublisherOptions(); - this.configuration.GetSection(PublisherOptions.Publisher).Bind(publisherOptions); - - var publishRequest = new PublishRequest - { - Message = eventModel.AsJSON(), - MessageAttributes = attributes, - Subject = "Disclosure Test", - TopicArn = publisherOptions.SNSTarget - }; - return await this.client.PublishAsync(publishRequest); - } - - - - - /// - /// Get all topic names - /// - /// - public async Task> ListAllTopicsAsync() - { - var topics = await this.client.ListTopicsAsync(); - topics.Topics.ForEach(topic => - { - this.logger.LogInformation($"Topic {topic.TopicArn}"); - }); - - return topics.Topics.Select(t => t.TopicArn.ToString()).ToList(); - - } -} diff --git a/backend/edt.notifications/SNS/Subscriber/ISQSSubscriber.cs b/backend/edt.notifications/SNS/Subscriber/ISQSSubscriber.cs deleted file mode 100644 index 7e806dff..00000000 --- a/backend/edt.notifications/SNS/Subscriber/ISQSSubscriber.cs +++ /dev/null @@ -1,12 +0,0 @@ -namespace edt.notifications.SNS.Subscriber; - -using System.Threading.Tasks; -using Amazon.SQS.Model; - -public interface ISQSSubscriber -{ - Task GetMessages(string qUrl, int waitTime); - Task> ListQueuesAsync(); - Task AcknowledgeMessagesAsync(string qUrl, List receiptHandles); - -} diff --git a/backend/edt.notifications/SNS/Subscriber/SQSSubscriber.cs b/backend/edt.notifications/SNS/Subscriber/SQSSubscriber.cs deleted file mode 100644 index 321d6ac6..00000000 --- a/backend/edt.notifications/SNS/Subscriber/SQSSubscriber.cs +++ /dev/null @@ -1,91 +0,0 @@ -namespace edt.notifications.SNS.Subscriber; - -using System.Collections.Generic; -using Amazon; -using Amazon.Runtime.CredentialManagement; -using Amazon.SQS; -using Amazon.SQS.Model; - -public class SQSSubscriber : ISQSSubscriber -{ - private int MaxMessages = 10; - private ILogger logger; - private IAmazonSQS client; - private readonly IConfiguration configuration; - - public SQSSubscriber() - { - } - - public SQSSubscriber(ILogger logger, IConfiguration configuration) - { - this.MaxMessages = MaxMessages; - this.logger = logger; - this.configuration = configuration; - var options = this.configuration.GetAWSOptions(); - var credentialProfileStoreChain = new CredentialProfileStoreChain(); - if (credentialProfileStoreChain.TryGetAWSCredentials(options.Profile, out var credentials)) - { - options.Credentials = credentials; - } - this.client = new AmazonSQSClient(options.Credentials, RegionEndpoint.CACentral1); - this.configuration = configuration; - } - - public async Task GetMessages( - string qUrl, int waitTime = 0) - { - logger.LogInformation($"Getting messages from {qUrl}"); - - try - { - var reponse = await client.ReceiveMessageAsync(new ReceiveMessageRequest - { - QueueUrl = qUrl, - MaxNumberOfMessages = MaxMessages, - WaitTimeSeconds = waitTime - // (Could also request attributes, set visibility timeout, etc.) - }); - - logger.LogInformation($"Response message count {reponse.Messages.Count}"); - - return reponse; - } - catch (Exception ex) - { - logger.LogError($"Failed to get messages {ex.Message}", ex); - return null; - } - } - - - - /// - /// List available queues - /// - /// - public async Task> ListQueuesAsync() - { - var request = new ListQueuesRequest - { - MaxResults = MaxMessages - }; - var response = await client.ListQueuesAsync(request); - return response.QueueUrls; - - } - - public async Task AcknowledgeMessagesAsync(string qUrl, List receiptHandles) - { - foreach (var receiptHandle in receiptHandles) - { - var response = await this.client.DeleteMessageAsync(qUrl, receiptHandle); - if (response != null) - { - this.logger.LogInformation($"Delete response {response.HttpStatusCode}"); - } - } - - return true; - } -} diff --git a/backend/edt.notifications/appsettings.json b/backend/edt.notifications/appsettings.json deleted file mode 100644 index ef730309..00000000 --- a/backend/edt.notifications/appsettings.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "Logging": { - "LogLevel": { - "Default": "Information", - "Microsoft.AspNetCore": "Warning" - } - }, - "AWS": { - "Profile": "nimbus", - "Region": "ca-central-1", - "ProfilesLocation": "c:\\AWS\\credentials" - }, - "Publisher": { - "SNSTarget": "" - }, - "Subscriber": { - "SQSUrl": "" - }, - "AllowedHosts": "*" -} diff --git a/backend/edt.notifications/edt.notifications.csproj b/backend/edt.notifications/edt.notifications.csproj deleted file mode 100644 index 74cb4895..00000000 --- a/backend/edt.notifications/edt.notifications.csproj +++ /dev/null @@ -1,23 +0,0 @@ - - - - net8.0 - enable - 1.1.5 - Linux - enable - - - - - - - - - - - - - - - diff --git a/backend/edt.notifications/edt.notifications.http b/backend/edt.notifications/edt.notifications.http deleted file mode 100644 index 2260d696..00000000 --- a/backend/edt.notifications/edt.notifications.http +++ /dev/null @@ -1,6 +0,0 @@ -@edt.notifications_HostAddress = http://localhost:5261 - -GET {{edt.notifications_HostAddress}}/weatherforecast/ -Accept: application/json - -### From daf868922d002603f640c27e824829bbd56529a8 Mon Sep 17 00:00:00 2001 From: Lee Wright <258036@NTTDATA.COM> Date: Sat, 18 May 2024 12:04:54 -0700 Subject: [PATCH 06/21] dev --- .github/workflows/build-push-frontend.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-push-frontend.yml b/.github/workflows/build-push-frontend.yml index 78a645b3..dc5a4305 100644 --- a/.github/workflows/build-push-frontend.yml +++ b/.github/workflows/build-push-frontend.yml @@ -85,7 +85,7 @@ jobs: if: steps.gitops.outcome == 'success' # Only run if the previous step (publish) was successful run: | - echo "Updating ${{ env.BRANCH_NAME }} helm values to trigger ArgoCD deployment" + echo "Updating helm ${{ env.BRANCH_NAME }} values to trigger ArgoCD deployment" # Navigate to the directory containing your Helm values file for the environment develop -> DEV, test -> test cd gitops/charts From a5dfdef918a36ccdd32d3896c283121a04acdbbc Mon Sep 17 00:00:00 2001 From: Lee Wright <258036@NTTDATA.COM> Date: Tue, 21 May 2024 08:27:41 -0700 Subject: [PATCH 07/21] cleanup --- charts/admin-frontend/.helmignore | 23 -- charts/admin-frontend/Chart.yaml | 24 -- charts/admin-frontend/templates/NOTES.txt | 22 -- charts/admin-frontend/templates/_helpers.tpl | 62 ---- .../admin-frontend/templates/config-map.yaml | 43 --- .../admin-frontend/templates/deployment.yaml | 113 -------- charts/admin-frontend/templates/hpa.yaml | 28 -- charts/admin-frontend/templates/ingress.yaml | 61 ---- charts/admin-frontend/templates/service.yaml | 15 - .../templates/serviceaccount.yaml | 12 - .../templates/tests/test-connection.yaml | 15 - charts/admin-frontend/values.yaml | 92 ------ charts/approvalflow/.helmignore | 23 -- charts/approvalflow/Chart.yaml | 24 -- charts/approvalflow/templates/NOTES.txt | 22 -- charts/approvalflow/templates/_helpers.tpl | 62 ---- charts/approvalflow/templates/deployment.yaml | 141 ---------- charts/approvalflow/templates/hpa.yaml | 28 -- charts/approvalflow/templates/ingress.yaml | 61 ---- charts/approvalflow/templates/secrets.yaml | 9 - charts/approvalflow/templates/service.yaml | 15 - .../templates/serviceaccount.yaml | 12 - .../templates/tests/test-connection.yaml | 15 - charts/approvalflow/values.yaml | 92 ------ charts/diam-config/.helmignore | 23 -- charts/diam-config/Chart.yaml | 24 -- charts/diam-config/templates/NOTES.txt | 22 -- charts/diam-config/templates/_helpers.tpl | 62 ---- charts/diam-config/templates/deployment.yaml | 109 ------- charts/diam-config/templates/hpa.yaml | 28 -- charts/diam-config/templates/ingress.yaml | 61 ---- charts/diam-config/templates/secrets.yaml | 9 - charts/diam-config/templates/service.yaml | 15 - .../diam-config/templates/serviceaccount.yaml | 12 - .../templates/tests/test-connection.yaml | 15 - charts/diam-config/values.yaml | 90 ------ charts/edt-casemgmt/.helmignore | 23 -- charts/edt-casemgmt/Chart.yaml | 24 -- charts/edt-casemgmt/templates/NOTES.txt | 22 -- charts/edt-casemgmt/templates/_helpers.tpl | 62 ---- charts/edt-casemgmt/templates/deployment.yaml | 141 ---------- charts/edt-casemgmt/templates/hpa.yaml | 28 -- charts/edt-casemgmt/templates/ingress.yaml | 61 ---- charts/edt-casemgmt/templates/migrations.yaml | 50 ---- charts/edt-casemgmt/templates/secrets.yaml | 9 - charts/edt-casemgmt/templates/service.yaml | 15 - .../templates/serviceaccount.yaml | 12 - .../templates/tests/test-connection.yaml | 15 - charts/edt-casemgmt/values.yaml | 101 ------- charts/edt-disclosure/.helmignore | 23 -- charts/edt-disclosure/Chart.yaml | 24 -- charts/edt-disclosure/templates/NOTES.txt | 22 -- charts/edt-disclosure/templates/_helpers.tpl | 62 ---- .../edt-disclosure/templates/deployment.yaml | 141 ---------- charts/edt-disclosure/templates/hpa.yaml | 28 -- charts/edt-disclosure/templates/ingress.yaml | 61 ---- charts/edt-disclosure/templates/secrets.yaml | 9 - charts/edt-disclosure/templates/service.yaml | 15 - .../templates/serviceaccount.yaml | 12 - .../templates/tests/test-connection.yaml | 15 - charts/edt-disclosure/values.yaml | 104 ------- charts/edt-service/.helmignore | 23 -- charts/edt-service/Chart.yaml | 24 -- charts/edt-service/templates/NOTES.txt | 22 -- charts/edt-service/templates/_helpers.tpl | 62 ---- charts/edt-service/templates/deployment.yaml | 150 ---------- charts/edt-service/templates/hpa.yaml | 28 -- charts/edt-service/templates/ingress.yaml | 61 ---- charts/edt-service/templates/migrations.yaml | 51 ---- charts/edt-service/templates/secrets.yaml | 17 -- charts/edt-service/templates/service.yaml | 15 - .../edt-service/templates/serviceaccount.yaml | 12 - .../templates/tests/test-connection.yaml | 15 - charts/edt-service/values.yaml | 101 ------- charts/frontend/.helmignore | 23 -- charts/frontend/Chart.yaml | 24 -- charts/frontend/templates/NOTES.txt | 22 -- charts/frontend/templates/_helpers.tpl | 62 ---- charts/frontend/templates/config-map.yaml | 52 ---- charts/frontend/templates/deployment.yaml | 85 ------ charts/frontend/templates/hpa.yaml | 28 -- charts/frontend/templates/ingress.yaml | 61 ---- charts/frontend/templates/service.yaml | 15 - charts/frontend/templates/serviceaccount.yaml | 12 - .../templates/tests/test-connection.yaml | 15 - charts/frontend/values.yaml | 93 ------ charts/jum-backend/.helmignore | 23 -- charts/jum-backend/Chart.yaml | 24 -- charts/jum-backend/templates/NOTES.txt | 22 -- charts/jum-backend/templates/_helpers.tpl | 53 ---- charts/jum-backend/templates/deployment.yaml | 131 --------- charts/jum-backend/templates/hpa.yaml | 28 -- charts/jum-backend/templates/ingress.yaml | 61 ---- charts/jum-backend/templates/migrations.yaml | 48 ---- charts/jum-backend/templates/route.yaml | 19 -- charts/jum-backend/templates/secrets.yaml | 9 - charts/jum-backend/templates/service.yaml | 15 - .../jum-backend/templates/serviceaccount.yaml | 12 - .../templates/tests/test-connection.yaml | 15 - charts/jum-backend/values.yaml | 101 ------- charts/jum-db/Chart.yaml | 12 - charts/jum-db/README.md | 226 --------------- charts/jum-db/templates/NOTES.txt | 30 -- charts/jum-db/templates/_helpers.tpl | 63 ----- charts/jum-db/templates/deployment.yaml | 109 ------- charts/jum-db/templates/pvc-data.yaml | 28 -- charts/jum-db/templates/secret.yaml | 16 -- charts/jum-db/templates/service.yaml | 31 -- charts/jum-db/templates/serviceaccount.yaml | 12 - charts/jum-db/values.yaml | 88 ------ charts/jum-notification/.helmignore | 23 -- charts/jum-notification/Chart.yaml | 24 -- charts/jum-notification/templates/NOTES.txt | 22 -- .../jum-notification/templates/_helpers.tpl | 53 ---- .../templates/deployment.yaml | 134 --------- charts/jum-notification/templates/hpa.yaml | 28 -- .../jum-notification/templates/ingress.yaml | 61 ---- .../templates/migrations.yaml | 45 --- .../jum-notification/templates/service.yaml | 15 - .../templates/serviceaccount.yaml | 12 - .../templates/tests/test-connection.yaml | 15 - charts/jum-notification/values.yaml | 95 ------- charts/jum/.helmignore | 23 -- charts/jum/Chart.lock | 9 - charts/jum/Chart.yaml | 37 --- charts/jum/charts/backend-0.1.2.tgz | Bin 5220 -> 0 bytes charts/jum/charts/notification-0.1.2.tgz | Bin 4928 -> 0 bytes charts/jum/templates/NOTES.txt | 22 -- charts/jum/templates/_helpers.tpl | 52 ---- charts/jum/templates/createdb-job.yaml | 59 ---- charts/jum/templates/dropdb-job.yaml | 53 ---- charts/jum/templates/ingress.yaml | 61 ---- charts/jum/templates/serviceaccount.yaml | 12 - .../jum/templates/tests/test-connection.yaml | 15 - charts/jum/values.yaml | 93 ------ charts/jumdatabase/.helmignore | 23 -- charts/jumdatabase/Chart.yaml | 26 -- charts/jumdatabase/readme.md | 99 ------- charts/jumdatabase/templates/_helpers.tpl | 70 ----- charts/jumdatabase/templates/deployment.yaml | 72 ----- charts/jumdatabase/templates/mssqlconfig.yaml | 23 -- charts/jumdatabase/templates/pvc.yaml | 60 ---- charts/jumdatabase/templates/secret.yaml | 17 -- charts/jumdatabase/templates/service.yaml | 14 - .../templates/tests/test-connection.yaml | 15 - charts/jumdatabase/values.yaml | 43 --- charts/pidp/.helmignore | 23 -- charts/pidp/Chart.lock | 36 --- charts/pidp/Chart.yaml | 68 ----- charts/pidp/charts/admin-frontend-0.2.0.tgz | Bin 4937 -> 0 bytes charts/pidp/charts/approvalflow-0.2.0.tgz | Bin 4817 -> 0 bytes charts/pidp/charts/diam-config-0.1.0.tgz | Bin 4581 -> 0 bytes charts/pidp/charts/edt-casemgmt-0.3.0.tgz | Bin 5248 -> 0 bytes charts/pidp/charts/edt-disclosure-0.9.0.tgz | Bin 4893 -> 0 bytes charts/pidp/charts/edt-service-0.3.0.tgz | Bin 5527 -> 0 bytes charts/pidp/charts/frontend-0.1.5.tgz | Bin 4685 -> 0 bytes charts/pidp/charts/jum-backend-0.2.0.tgz | Bin 5317 -> 0 bytes charts/pidp/charts/jum-notification-0.2.0.tgz | Bin 5089 -> 0 bytes charts/pidp/charts/nginx-9.7.3.tgz | Bin 39056 -> 0 bytes charts/pidp/charts/webapi-0.3.0.tgz | Bin 5212 -> 0 bytes charts/pidp/templates/NOTES.txt | 22 -- charts/pidp/templates/_helpers.tpl | 62 ---- charts/pidp/templates/createdb-job.yaml | 59 ---- charts/pidp/templates/dropdb-job.yaml | 53 ---- charts/pidp/templates/ingress.yaml | 64 ----- charts/pidp/templates/route.yaml | 19 -- charts/pidp/templates/serviceaccount.yaml | 12 - .../pidp/templates/tests/test-connection.yaml | 15 - charts/pidp/values.yaml | 265 ------------------ charts/plr-intake/.helmignore | 23 -- charts/plr-intake/Chart.lock | 6 - charts/plr-intake/Chart.yaml | 24 -- charts/plr-intake/templates/NOTES.txt | 22 -- charts/plr-intake/templates/_helpers.tpl | 62 ---- charts/plr-intake/templates/deployment.yaml | 112 -------- charts/plr-intake/templates/hpa.yaml | 28 -- charts/plr-intake/templates/ingress.yaml | 61 ---- charts/plr-intake/templates/migrations.yaml | 57 ---- charts/plr-intake/templates/service.yaml | 15 - .../plr-intake/templates/serviceaccount.yaml | 12 - .../templates/tests/test-connection.yaml | 15 - charts/plr-intake/values.yaml | 98 ------- charts/webapi/.helmignore | 23 -- charts/webapi/Chart.yaml | 24 -- charts/webapi/templates/NOTES.txt | 22 -- charts/webapi/templates/_helpers.tpl | 62 ---- charts/webapi/templates/deployment.yaml | 149 ---------- charts/webapi/templates/hpa.yaml | 28 -- charts/webapi/templates/ingress.yaml | 61 ---- charts/webapi/templates/migrations.yaml | 58 ---- charts/webapi/templates/service.yaml | 15 - charts/webapi/templates/serviceaccount.yaml | 12 - .../templates/tests/test-connection.yaml | 15 - charts/webapi/values.yaml | 98 ------- deploy/demo_values.yaml | 35 --- deploy/dev_values.yaml | 137 --------- deploy/prod_values.yaml | 77 ----- deploy/test_values.yaml | 107 ------- 198 files changed, 8393 deletions(-) delete mode 100644 charts/admin-frontend/.helmignore delete mode 100644 charts/admin-frontend/Chart.yaml delete mode 100644 charts/admin-frontend/templates/NOTES.txt delete mode 100644 charts/admin-frontend/templates/_helpers.tpl delete mode 100644 charts/admin-frontend/templates/config-map.yaml delete mode 100644 charts/admin-frontend/templates/deployment.yaml delete mode 100644 charts/admin-frontend/templates/hpa.yaml delete mode 100644 charts/admin-frontend/templates/ingress.yaml delete mode 100644 charts/admin-frontend/templates/service.yaml delete mode 100644 charts/admin-frontend/templates/serviceaccount.yaml delete mode 100644 charts/admin-frontend/templates/tests/test-connection.yaml delete mode 100644 charts/admin-frontend/values.yaml delete mode 100644 charts/approvalflow/.helmignore delete mode 100644 charts/approvalflow/Chart.yaml delete mode 100644 charts/approvalflow/templates/NOTES.txt delete mode 100644 charts/approvalflow/templates/_helpers.tpl delete mode 100644 charts/approvalflow/templates/deployment.yaml delete mode 100644 charts/approvalflow/templates/hpa.yaml delete mode 100644 charts/approvalflow/templates/ingress.yaml delete mode 100644 charts/approvalflow/templates/secrets.yaml delete mode 100644 charts/approvalflow/templates/service.yaml delete mode 100644 charts/approvalflow/templates/serviceaccount.yaml delete mode 100644 charts/approvalflow/templates/tests/test-connection.yaml delete mode 100644 charts/approvalflow/values.yaml delete mode 100644 charts/diam-config/.helmignore delete mode 100644 charts/diam-config/Chart.yaml delete mode 100644 charts/diam-config/templates/NOTES.txt delete mode 100644 charts/diam-config/templates/_helpers.tpl delete mode 100644 charts/diam-config/templates/deployment.yaml delete mode 100644 charts/diam-config/templates/hpa.yaml delete mode 100644 charts/diam-config/templates/ingress.yaml delete mode 100644 charts/diam-config/templates/secrets.yaml delete mode 100644 charts/diam-config/templates/service.yaml delete mode 100644 charts/diam-config/templates/serviceaccount.yaml delete mode 100644 charts/diam-config/templates/tests/test-connection.yaml delete mode 100644 charts/diam-config/values.yaml delete mode 100644 charts/edt-casemgmt/.helmignore delete mode 100644 charts/edt-casemgmt/Chart.yaml delete mode 100644 charts/edt-casemgmt/templates/NOTES.txt delete mode 100644 charts/edt-casemgmt/templates/_helpers.tpl delete mode 100644 charts/edt-casemgmt/templates/deployment.yaml delete mode 100644 charts/edt-casemgmt/templates/hpa.yaml delete mode 100644 charts/edt-casemgmt/templates/ingress.yaml delete mode 100644 charts/edt-casemgmt/templates/migrations.yaml delete mode 100644 charts/edt-casemgmt/templates/secrets.yaml delete mode 100644 charts/edt-casemgmt/templates/service.yaml delete mode 100644 charts/edt-casemgmt/templates/serviceaccount.yaml delete mode 100644 charts/edt-casemgmt/templates/tests/test-connection.yaml delete mode 100644 charts/edt-casemgmt/values.yaml delete mode 100644 charts/edt-disclosure/.helmignore delete mode 100644 charts/edt-disclosure/Chart.yaml delete mode 100644 charts/edt-disclosure/templates/NOTES.txt delete mode 100644 charts/edt-disclosure/templates/_helpers.tpl delete mode 100644 charts/edt-disclosure/templates/deployment.yaml delete mode 100644 charts/edt-disclosure/templates/hpa.yaml delete mode 100644 charts/edt-disclosure/templates/ingress.yaml delete mode 100644 charts/edt-disclosure/templates/secrets.yaml delete mode 100644 charts/edt-disclosure/templates/service.yaml delete mode 100644 charts/edt-disclosure/templates/serviceaccount.yaml delete mode 100644 charts/edt-disclosure/templates/tests/test-connection.yaml delete mode 100644 charts/edt-disclosure/values.yaml delete mode 100644 charts/edt-service/.helmignore delete mode 100644 charts/edt-service/Chart.yaml delete mode 100644 charts/edt-service/templates/NOTES.txt delete mode 100644 charts/edt-service/templates/_helpers.tpl delete mode 100644 charts/edt-service/templates/deployment.yaml delete mode 100644 charts/edt-service/templates/hpa.yaml delete mode 100644 charts/edt-service/templates/ingress.yaml delete mode 100644 charts/edt-service/templates/migrations.yaml delete mode 100644 charts/edt-service/templates/secrets.yaml delete mode 100644 charts/edt-service/templates/service.yaml delete mode 100644 charts/edt-service/templates/serviceaccount.yaml delete mode 100644 charts/edt-service/templates/tests/test-connection.yaml delete mode 100644 charts/edt-service/values.yaml delete mode 100644 charts/frontend/.helmignore delete mode 100644 charts/frontend/Chart.yaml delete mode 100644 charts/frontend/templates/NOTES.txt delete mode 100644 charts/frontend/templates/_helpers.tpl delete mode 100644 charts/frontend/templates/config-map.yaml delete mode 100644 charts/frontend/templates/deployment.yaml delete mode 100644 charts/frontend/templates/hpa.yaml delete mode 100644 charts/frontend/templates/ingress.yaml delete mode 100644 charts/frontend/templates/service.yaml delete mode 100644 charts/frontend/templates/serviceaccount.yaml delete mode 100644 charts/frontend/templates/tests/test-connection.yaml delete mode 100644 charts/frontend/values.yaml delete mode 100644 charts/jum-backend/.helmignore delete mode 100644 charts/jum-backend/Chart.yaml delete mode 100644 charts/jum-backend/templates/NOTES.txt delete mode 100644 charts/jum-backend/templates/_helpers.tpl delete mode 100644 charts/jum-backend/templates/deployment.yaml delete mode 100644 charts/jum-backend/templates/hpa.yaml delete mode 100644 charts/jum-backend/templates/ingress.yaml delete mode 100644 charts/jum-backend/templates/migrations.yaml delete mode 100644 charts/jum-backend/templates/route.yaml delete mode 100644 charts/jum-backend/templates/secrets.yaml delete mode 100644 charts/jum-backend/templates/service.yaml delete mode 100644 charts/jum-backend/templates/serviceaccount.yaml delete mode 100644 charts/jum-backend/templates/tests/test-connection.yaml delete mode 100644 charts/jum-backend/values.yaml delete mode 100644 charts/jum-db/Chart.yaml delete mode 100644 charts/jum-db/README.md delete mode 100644 charts/jum-db/templates/NOTES.txt delete mode 100644 charts/jum-db/templates/_helpers.tpl delete mode 100644 charts/jum-db/templates/deployment.yaml delete mode 100644 charts/jum-db/templates/pvc-data.yaml delete mode 100644 charts/jum-db/templates/secret.yaml delete mode 100644 charts/jum-db/templates/service.yaml delete mode 100644 charts/jum-db/templates/serviceaccount.yaml delete mode 100644 charts/jum-db/values.yaml delete mode 100644 charts/jum-notification/.helmignore delete mode 100644 charts/jum-notification/Chart.yaml delete mode 100644 charts/jum-notification/templates/NOTES.txt delete mode 100644 charts/jum-notification/templates/_helpers.tpl delete mode 100644 charts/jum-notification/templates/deployment.yaml delete mode 100644 charts/jum-notification/templates/hpa.yaml delete mode 100644 charts/jum-notification/templates/ingress.yaml delete mode 100644 charts/jum-notification/templates/migrations.yaml delete mode 100644 charts/jum-notification/templates/service.yaml delete mode 100644 charts/jum-notification/templates/serviceaccount.yaml delete mode 100644 charts/jum-notification/templates/tests/test-connection.yaml delete mode 100644 charts/jum-notification/values.yaml delete mode 100644 charts/jum/.helmignore delete mode 100644 charts/jum/Chart.lock delete mode 100644 charts/jum/Chart.yaml delete mode 100644 charts/jum/charts/backend-0.1.2.tgz delete mode 100644 charts/jum/charts/notification-0.1.2.tgz delete mode 100644 charts/jum/templates/NOTES.txt delete mode 100644 charts/jum/templates/_helpers.tpl delete mode 100644 charts/jum/templates/createdb-job.yaml delete mode 100644 charts/jum/templates/dropdb-job.yaml delete mode 100644 charts/jum/templates/ingress.yaml delete mode 100644 charts/jum/templates/serviceaccount.yaml delete mode 100644 charts/jum/templates/tests/test-connection.yaml delete mode 100644 charts/jum/values.yaml delete mode 100644 charts/jumdatabase/.helmignore delete mode 100644 charts/jumdatabase/Chart.yaml delete mode 100644 charts/jumdatabase/readme.md delete mode 100644 charts/jumdatabase/templates/_helpers.tpl delete mode 100644 charts/jumdatabase/templates/deployment.yaml delete mode 100644 charts/jumdatabase/templates/mssqlconfig.yaml delete mode 100644 charts/jumdatabase/templates/pvc.yaml delete mode 100644 charts/jumdatabase/templates/secret.yaml delete mode 100644 charts/jumdatabase/templates/service.yaml delete mode 100644 charts/jumdatabase/templates/tests/test-connection.yaml delete mode 100644 charts/jumdatabase/values.yaml delete mode 100644 charts/pidp/.helmignore delete mode 100644 charts/pidp/Chart.lock delete mode 100644 charts/pidp/Chart.yaml delete mode 100644 charts/pidp/charts/admin-frontend-0.2.0.tgz delete mode 100644 charts/pidp/charts/approvalflow-0.2.0.tgz delete mode 100644 charts/pidp/charts/diam-config-0.1.0.tgz delete mode 100644 charts/pidp/charts/edt-casemgmt-0.3.0.tgz delete mode 100644 charts/pidp/charts/edt-disclosure-0.9.0.tgz delete mode 100644 charts/pidp/charts/edt-service-0.3.0.tgz delete mode 100644 charts/pidp/charts/frontend-0.1.5.tgz delete mode 100644 charts/pidp/charts/jum-backend-0.2.0.tgz delete mode 100644 charts/pidp/charts/jum-notification-0.2.0.tgz delete mode 100644 charts/pidp/charts/nginx-9.7.3.tgz delete mode 100644 charts/pidp/charts/webapi-0.3.0.tgz delete mode 100644 charts/pidp/templates/NOTES.txt delete mode 100644 charts/pidp/templates/_helpers.tpl delete mode 100644 charts/pidp/templates/createdb-job.yaml delete mode 100644 charts/pidp/templates/dropdb-job.yaml delete mode 100644 charts/pidp/templates/ingress.yaml delete mode 100644 charts/pidp/templates/route.yaml delete mode 100644 charts/pidp/templates/serviceaccount.yaml delete mode 100644 charts/pidp/templates/tests/test-connection.yaml delete mode 100644 charts/pidp/values.yaml delete mode 100644 charts/plr-intake/.helmignore delete mode 100644 charts/plr-intake/Chart.lock delete mode 100644 charts/plr-intake/Chart.yaml delete mode 100644 charts/plr-intake/templates/NOTES.txt delete mode 100644 charts/plr-intake/templates/_helpers.tpl delete mode 100644 charts/plr-intake/templates/deployment.yaml delete mode 100644 charts/plr-intake/templates/hpa.yaml delete mode 100644 charts/plr-intake/templates/ingress.yaml delete mode 100644 charts/plr-intake/templates/migrations.yaml delete mode 100644 charts/plr-intake/templates/service.yaml delete mode 100644 charts/plr-intake/templates/serviceaccount.yaml delete mode 100644 charts/plr-intake/templates/tests/test-connection.yaml delete mode 100644 charts/plr-intake/values.yaml delete mode 100644 charts/webapi/.helmignore delete mode 100644 charts/webapi/Chart.yaml delete mode 100644 charts/webapi/templates/NOTES.txt delete mode 100644 charts/webapi/templates/_helpers.tpl delete mode 100644 charts/webapi/templates/deployment.yaml delete mode 100644 charts/webapi/templates/hpa.yaml delete mode 100644 charts/webapi/templates/ingress.yaml delete mode 100644 charts/webapi/templates/migrations.yaml delete mode 100644 charts/webapi/templates/service.yaml delete mode 100644 charts/webapi/templates/serviceaccount.yaml delete mode 100644 charts/webapi/templates/tests/test-connection.yaml delete mode 100644 charts/webapi/values.yaml delete mode 100644 deploy/demo_values.yaml delete mode 100644 deploy/dev_values.yaml delete mode 100644 deploy/prod_values.yaml delete mode 100644 deploy/test_values.yaml diff --git a/charts/admin-frontend/.helmignore b/charts/admin-frontend/.helmignore deleted file mode 100644 index 0e8a0eb3..00000000 --- a/charts/admin-frontend/.helmignore +++ /dev/null @@ -1,23 +0,0 @@ -# Patterns to ignore when building packages. -# This supports shell glob matching, relative path matching, and -# negation (prefixed with !). Only one pattern per line. -.DS_Store -# Common VCS dirs -.git/ -.gitignore -.bzr/ -.bzrignore -.hg/ -.hgignore -.svn/ -# Common backup files -*.swp -*.bak -*.tmp -*.orig -*~ -# Various IDEs -.project -.idea/ -*.tmproj -.vscode/ diff --git a/charts/admin-frontend/Chart.yaml b/charts/admin-frontend/Chart.yaml deleted file mode 100644 index 174971e8..00000000 --- a/charts/admin-frontend/Chart.yaml +++ /dev/null @@ -1,24 +0,0 @@ -apiVersion: v2 -name: admin-frontend -description: A Helm chart for Kubernetes - -# A chart can be either an 'application' or a 'library' chart. -# -# Application charts are a collection of templates that can be packaged into versioned archives -# to be deployed. -# -# Library charts provide useful utilities or functions for the chart developer. They're included as -# a dependency of application charts to inject those utilities and functions into the rendering -# pipeline. Library charts do not define any templates and therefore cannot be deployed. -type: application - -# This is the chart version. This version number should be incremented each time you make changes -# to the chart and its templates, including the app version. -# Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 0.2.0 - -# This is the version number of the application being deployed. This version number should be -# incremented each time you make changes to the application. Versions are not expected to -# follow Semantic Versioning. They should reflect the version the application is using. -# It is recommended to use it with quotes. -appVersion: "0.0.1" diff --git a/charts/admin-frontend/templates/NOTES.txt b/charts/admin-frontend/templates/NOTES.txt deleted file mode 100644 index 792439d4..00000000 --- a/charts/admin-frontend/templates/NOTES.txt +++ /dev/null @@ -1,22 +0,0 @@ -1. Get the application URL by running these commands: -{{- if .Values.ingress.enabled }} -{{- range $host := .Values.ingress.hosts }} - {{- range .paths }} - http{{ if $.Values.ingress.tls }}s{{ end }}://{{ $host.host }}{{ .path }} - {{- end }} -{{- end }} -{{- else if contains "NodePort" .Values.service.type }} - export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "admin-frontend.fullname" . }}) - export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}") - echo http://$NODE_IP:$NODE_PORT -{{- else if contains "LoadBalancer" .Values.service.type }} - NOTE: It may take a few minutes for the LoadBalancer IP to be available. - You can watch the status of by running 'kubectl get --namespace {{ .Release.Namespace }} svc -w {{ include "admin-frontend.fullname" . }}' - export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "admin-frontend.fullname" . }} --template "{{"{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}") - echo http://$SERVICE_IP:{{ .Values.service.port }} -{{- else if contains "ClusterIP" .Values.service.type }} - export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name={{ include "admin-frontend.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") - export CONTAINER_PORT=$(kubectl get pod --namespace {{ .Release.Namespace }} $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}") - echo "Visit http://127.0.0.1:8080 to use your application" - kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME 8080:$CONTAINER_PORT -{{- end }} diff --git a/charts/admin-frontend/templates/_helpers.tpl b/charts/admin-frontend/templates/_helpers.tpl deleted file mode 100644 index d3e35875..00000000 --- a/charts/admin-frontend/templates/_helpers.tpl +++ /dev/null @@ -1,62 +0,0 @@ -{{/* -Expand the name of the chart. -*/}} -{{- define "admin-frontend.name" -}} -{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }} -{{- end }} - -{{/* -Create a default fully qualified app name. -We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). -If release name contains chart name it will be used as a full name. -*/}} -{{- define "admin-frontend.fullname" -}} -{{- if .Values.fullnameOverride }} -{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }} -{{- else }} -{{- $name := default .Chart.Name .Values.nameOverride }} -{{- if contains $name .Release.Name }} -{{- .Release.Name | trunc 63 | trimSuffix "-" }} -{{- else }} -{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }} -{{- end }} -{{- end }} -{{- end }} - -{{/* -Create chart name and version as used by the chart label. -*/}} -{{- define "admin-frontend.chart" -}} -{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} -{{- end }} - -{{/* -Common labels -*/}} -{{- define "admin-frontend.labels" -}} -helm.sh/chart: {{ include "admin-frontend.chart" . }} -{{ include "admin-frontend.selectorLabels" . }} -{{- if .Chart.AppVersion }} -app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} -{{- end }} -app.kubernetes.io/managed-by: {{ .Release.Service }} -{{- end }} - -{{/* -Selector labels -*/}} -{{- define "admin-frontend.selectorLabels" -}} -app.kubernetes.io/name: {{ include "admin-frontend.name" . }} -app.kubernetes.io/instance: {{ .Release.Name }} -{{- end }} - -{{/* -Create the name of the service account to use -*/}} -{{- define "admin-frontend.serviceAccountName" -}} -{{- if .Values.serviceAccount.create }} -{{- default (include "admin-frontend.fullname" .) .Values.serviceAccount.name }} -{{- else }} -{{- default "default" .Values.serviceAccount.name }} -{{- end }} -{{- end }} diff --git a/charts/admin-frontend/templates/config-map.yaml b/charts/admin-frontend/templates/config-map.yaml deleted file mode 100644 index 559d910a..00000000 --- a/charts/admin-frontend/templates/config-map.yaml +++ /dev/null @@ -1,43 +0,0 @@ -{{- $separator := ternary "-" "." (regexMatch "(?:\\..*?){4}" .Values.global.vanityURL) -}} -{{- $domain := .Values.global.vanityURL -}} -{{- $fullName := include "admin-frontend.fullname" . -}} -{{ $release := .Release.Name }} -{{ $ocEnv := regexFind "([^-]*$)" .Release.Namespace }} -{{ $isPR := hasPrefix "pr-" .Release.Name }} -## Derived release name -{{ $drn := ternary $release $ocEnv $isPR }} -{{ $isProd := contains "prod" $ocEnv }} -# -kind: ConfigMap -apiVersion: v1 -metadata: - name: {{ include "admin-frontend.fullname" . }} - labels: - {{- include "admin-frontend.labels" . | nindent 4 }} -data: - environment.json: |- - { - "environmentName": "{{ .Values.settings.environmentName }}", - "apiEndpoint": "https://{{ .Values.global.vanityURL }}/api/v1", - "applicationUrl": "https://{{ .Values.global.vanityURL }}", - "demsImportURL": "{{ .Values.settings.edtURL }}/Edt.aspx#/import/", - "keycloakConfig": { - "config": { - "url": "{{ .Values.settings.keycloak.url }}", - "realm": "{{ .Values.settings.keycloak.realm }}", - "clientId": "{{ .Values.settings.keycloak.clientId }}" - }, - "initOptions": { - "onLoad": "check-sso" - } - } - } - keycloak.json: |- - { - "realm": "BCPS", - "auth-server-url": "https://dev.common-sso.justice.gov.bc.ca/auth", - "ssl-required": "external", - "resource": "DIAM-BCPS-ADMIN", - "public-client": true, - "confidential-port": 0 - } diff --git a/charts/admin-frontend/templates/deployment.yaml b/charts/admin-frontend/templates/deployment.yaml deleted file mode 100644 index 10b0078d..00000000 --- a/charts/admin-frontend/templates/deployment.yaml +++ /dev/null @@ -1,113 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - name: {{ include "admin-frontend.fullname" . }} - labels: - {{- include "admin-frontend.labels" . | nindent 4 }} -spec: - {{- if not .Values.autoscaling.enabled }} - replicas: {{ .Values.replicaCount }} - {{- end }} - selector: - matchLabels: - {{- include "admin-frontend.selectorLabels" . | nindent 6 }} - template: - metadata: - annotations: - prometheus.io/scrape: 'true' - prometheus.io/port: "8080" - vault.hashicorp.com/agent-inject: 'true' - vault.hashicorp.com/agent-pre-populate-only: 'true' - vault.hashicorp.com/auth-path: auth/k8s-gold - vault.hashicorp.com/namespace: platform-services - vault.hashicorp.com/agent-requests-cpu: 5m - vault.hashicorp.com/agent-limits-cpu: 10m - vault.hashicorp.com/agent-requests-mem: 20Mi - vault.hashicorp.com/role: {{ .Values.global.vault.role }} # licenseplate-nonprod or licenseplate-prod are your options - vault.hashicorp.com/agent-inject-secret-DIAM-Admin-Client: {{ .Values.global.vault.role }}/{{ .Values.global.vault.path }}DIAM-Admin-Client - vault.hashicorp.com/agent-inject-template-DIAM-Admin-Client: | - {{`{{- with secret `}}"{{ .Values.global.vault.role }}/{{ .Values.global.vault.path }}DIAM-Admin-Client"{{` }} - {{- range $k, $v := .Data.data }} - {{ $k }}="{{ $v }}"{{ end -}} - {{- end `}} }} - checksum/config: {{ include (print $.Template.BasePath "/config-map.yaml") . | sha256sum }} - {{- if .Values.global.commit_sha }} - commit_sha: {{ quote .Values.global.commit_sha }} - {{- end}} - {{- with .Values.podAnnotations }} - {{- toYaml . | nindent 8 }} - {{- end }} - labels: - {{- include "admin-frontend.selectorLabels" . | nindent 8 }} - spec: - {{- with .Values.imagePullSecrets }} - imagePullSecrets: - {{- toYaml . | nindent 8 }} - {{- end }} - serviceAccountName: {{ .Values.global.licenseplate }}-vault - securityContext: - {{- toYaml .Values.podSecurityContext | nindent 8 }} - volumes: - - name: admin-frontend-config - configMap: - name: {{ include "admin-frontend.fullname" . }} - - name: admin-frontend-env - configMap: - name: admin-frontend-env - containers: - - name: {{ .Chart.Name }} - securityContext: - {{- toYaml .Values.securityContext | nindent 12 }} - image: "{{ .Values.global.image.registry }}/{{ .Values.image.repository }}:{{ .Values.global.image.tag | default .Chart.AppVersion }}" - imagePullPolicy: {{ .Values.image.pullPolicy }} - ports: - - name: http - containerPort: 8080 - protocol: TCP - livenessProbe: - httpGet: - path: / - port: http - readinessProbe: - httpGet: - path: / - port: http - resources: - {{- toYaml .Values.resources | nindent 12 }} - volumeMounts: - - name: admin-frontend-config - subPath: environment.json - mountPath: /app/assets/environment.json - - name: admin-frontend-config - subPath: keycloak.json - mountPath: /app/keycloak.json - - name: admin-frontend-env - subPath: .env - mountPath: /app/.env - envFrom: - - secretRef: - name: admin-frontend-env-secrets - {{- with .Values.nodeSelector }} - nodeSelector: - {{- toYaml . | nindent 8 }} - {{- end }} - affinity: - podAntiAffinity: - preferredDuringSchedulingIgnoredDuringExecution: - - weight: 1 - podAffinityTerm: - topologyKey: kubernetes.io/hostname - labelSelector: - matchExpressions: - - key: app.kubernetes.io/name - operator: In - values: - - {{ include "admin-frontend.name" . }} - - key: app.kubernetes.io/instance - operator: In - values: - - {{ .Release.Name }} - {{- with .Values.tolerations }} - tolerations: - {{- toYaml . | nindent 8 }} - {{- end }} diff --git a/charts/admin-frontend/templates/hpa.yaml b/charts/admin-frontend/templates/hpa.yaml deleted file mode 100644 index 9907894f..00000000 --- a/charts/admin-frontend/templates/hpa.yaml +++ /dev/null @@ -1,28 +0,0 @@ -{{- if .Values.autoscaling.enabled }} -apiVersion: autoscaling/v2beta1 -kind: HorizontalPodAutoscaler -metadata: - name: {{ include "admin-frontend.fullname" . }} - labels: - {{- include "admin-frontend.labels" . | nindent 4 }} -spec: - scaleTargetRef: - apiVersion: apps/v1 - kind: Deployment - name: {{ include "admin-frontend.fullname" . }} - minReplicas: {{ .Values.autoscaling.minReplicas }} - maxReplicas: {{ .Values.autoscaling.maxReplicas }} - metrics: - {{- if .Values.autoscaling.targetCPUUtilizationPercentage }} - - type: Resource - resource: - name: cpu - targetAverageUtilization: {{ .Values.autoscaling.targetCPUUtilizationPercentage }} - {{- end }} - {{- if .Values.autoscaling.targetMemoryUtilizationPercentage }} - - type: Resource - resource: - name: memory - targetAverageUtilization: {{ .Values.autoscaling.targetMemoryUtilizationPercentage }} - {{- end }} -{{- end }} diff --git a/charts/admin-frontend/templates/ingress.yaml b/charts/admin-frontend/templates/ingress.yaml deleted file mode 100644 index 1288922b..00000000 --- a/charts/admin-frontend/templates/ingress.yaml +++ /dev/null @@ -1,61 +0,0 @@ -{{- if .Values.ingress.enabled -}} -{{- $fullName := include "admin-frontend.fullname" . -}} -{{- $svcPort := .Values.service.port -}} -{{- if and .Values.ingress.className (not (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion)) }} - {{- if not (hasKey .Values.ingress.annotations "kubernetes.io/ingress.class") }} - {{- $_ := set .Values.ingress.annotations "kubernetes.io/ingress.class" .Values.ingress.className}} - {{- end }} -{{- end }} -{{- if semverCompare ">=1.19-0" .Capabilities.KubeVersion.GitVersion -}} -apiVersion: networking.k8s.io/v1 -{{- else if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion -}} -apiVersion: networking.k8s.io/v1beta1 -{{- else -}} -apiVersion: extensions/v1beta1 -{{- end }} -kind: Ingress -metadata: - name: {{ $fullName }} - labels: - {{- include "admin-frontend.labels" . | nindent 4 }} - {{- with .Values.ingress.annotations }} - annotations: - {{- toYaml . | nindent 4 }} - {{- end }} -spec: - {{- if and .Values.ingress.className (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion) }} - ingressClassName: {{ .Values.ingress.className }} - {{- end }} - {{- if .Values.ingress.tls }} - tls: - {{- range .Values.ingress.tls }} - - hosts: - {{- range .hosts }} - - {{ . | quote }} - {{- end }} - secretName: {{ .secretName }} - {{- end }} - {{- end }} - rules: - {{- range .Values.ingress.hosts }} - - host: {{ .host | quote }} - http: - paths: - {{- range .paths }} - - path: {{ .path }} - {{- if and .pathType (semverCompare ">=1.18-0" $.Capabilities.KubeVersion.GitVersion) }} - pathType: {{ .pathType }} - {{- end }} - backend: - {{- if semverCompare ">=1.19-0" $.Capabilities.KubeVersion.GitVersion }} - service: - name: {{ $fullName }} - port: - number: {{ $svcPort }} - {{- else }} - serviceName: {{ $fullName }} - servicePort: {{ $svcPort }} - {{- end }} - {{- end }} - {{- end }} -{{- end }} diff --git a/charts/admin-frontend/templates/service.yaml b/charts/admin-frontend/templates/service.yaml deleted file mode 100644 index 934afcff..00000000 --- a/charts/admin-frontend/templates/service.yaml +++ /dev/null @@ -1,15 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - name: {{ include "admin-frontend.fullname" . }} - labels: - {{- include "admin-frontend.labels" . | nindent 4 }} -spec: - type: {{ .Values.service.type }} - ports: - - port: {{ .Values.service.port }} - targetPort: http - protocol: TCP - name: http - selector: - {{- include "admin-frontend.selectorLabels" . | nindent 4 }} diff --git a/charts/admin-frontend/templates/serviceaccount.yaml b/charts/admin-frontend/templates/serviceaccount.yaml deleted file mode 100644 index accc8e4f..00000000 --- a/charts/admin-frontend/templates/serviceaccount.yaml +++ /dev/null @@ -1,12 +0,0 @@ -{{- if .Values.serviceAccount.create -}} -apiVersion: v1 -kind: ServiceAccount -metadata: - name: {{ include "admin-frontend.serviceAccountName" . }} - labels: - {{- include "admin-frontend.labels" . | nindent 4 }} - {{- with .Values.serviceAccount.annotations }} - annotations: - {{- toYaml . | nindent 4 }} - {{- end }} -{{- end }} diff --git a/charts/admin-frontend/templates/tests/test-connection.yaml b/charts/admin-frontend/templates/tests/test-connection.yaml deleted file mode 100644 index 9abcc4c7..00000000 --- a/charts/admin-frontend/templates/tests/test-connection.yaml +++ /dev/null @@ -1,15 +0,0 @@ -apiVersion: v1 -kind: Pod -metadata: - name: "{{ include "admin-frontend.fullname" . }}-test-connection" - labels: - {{- include "admin-frontend.labels" . | nindent 4 }} - annotations: - "helm.sh/hook": test -spec: - containers: - - name: wget - image: busybox - command: ['wget'] - args: ['{{ include "admin-frontend.fullname" . }}:{{ .Values.service.port }}'] - restartPolicy: Never diff --git a/charts/admin-frontend/values.yaml b/charts/admin-frontend/values.yaml deleted file mode 100644 index 7df13e6d..00000000 --- a/charts/admin-frontend/values.yaml +++ /dev/null @@ -1,92 +0,0 @@ -# Default values for frontend. -# This is a YAML-formatted file. -# Declare variables to be passed into your templates. - -global: - vanityURL: "" - commit_sha: "" - image: - registry: image-registry.openshift-image-registry.svc:5000/e27db1-tools - tag: latest - -replicaCount: 1 - -image: - repository: pidp-admin-frontend - pullPolicy: Always - # Overrides the image tag whose default is the chart appVersion. - tag: "latest" - -imagePullSecrets: [] -nameOverride: "" -fullnameOverride: "" - -settings: - environmentName: dev - keycloak: - url: https://sso-dev-5b7aa5-dev.apps.silver.devops.gov.bc.ca/auth - realm: "DEMSPOC" - clientId: "PIDP-WEBAPP" - -serviceAccount: - # Specifies whether a service account should be created - create: false - # Annotations to add to the service account - annotations: {} - # The name of the service account to use. - # If not set and create is true, a name is generated using the fullname template - name: "" - -podAnnotations: {} - -podSecurityContext: {} - # fsGroup: 2000 - -securityContext: {} - # capabilities: - # drop: - # - ALL - # readOnlyRootFilesystem: true - # runAsNonRoot: true - # runAsUser: 1000 - -service: - type: ClusterIP - port: 8080 - -ingress: - enabled: false - className: "" - annotations: {} - # kubernetes.io/ingress.class: nginx - # kubernetes.io/tls-acme: "true" - hosts: - - host: pidp-admin-frontend-e27db1-dev.apps.silver.devops.gov.bc.ca - paths: - - path: / - pathType: ImplementationSpecific - tls: [] - # - secretName: chart-example-tls - # hosts: - # - chart-example.local - -resources: - limits: - cpu: 25m - memory: 56Mi - requests: - cpu: 10m - memory: 5Mi - -autoscaling: - enabled: false - minReplicas: 1 - maxReplicas: 5 - targetCPUUtilizationPercentage: 80 - targetMemoryUtilizationPercentage: 80 - -nodeSelector: {} - -tolerations: [] - -affinity: {} diff --git a/charts/approvalflow/.helmignore b/charts/approvalflow/.helmignore deleted file mode 100644 index 0e8a0eb3..00000000 --- a/charts/approvalflow/.helmignore +++ /dev/null @@ -1,23 +0,0 @@ -# Patterns to ignore when building packages. -# This supports shell glob matching, relative path matching, and -# negation (prefixed with !). Only one pattern per line. -.DS_Store -# Common VCS dirs -.git/ -.gitignore -.bzr/ -.bzrignore -.hg/ -.hgignore -.svn/ -# Common backup files -*.swp -*.bak -*.tmp -*.orig -*~ -# Various IDEs -.project -.idea/ -*.tmproj -.vscode/ diff --git a/charts/approvalflow/Chart.yaml b/charts/approvalflow/Chart.yaml deleted file mode 100644 index 492568d3..00000000 --- a/charts/approvalflow/Chart.yaml +++ /dev/null @@ -1,24 +0,0 @@ -apiVersion: v2 -name: approvalflow -description: A Helm chart for Approval Services - -# A chart can be either an 'application' or a 'library' chart. -# -# Application charts are a collection of templates that can be packaged into versioned archives -# to be deployed. -# -# Library charts provide useful utilities or functions for the chart developer. They're included as -# a dependency of application charts to inject those utilities and functions into the rendering -# pipeline. Library charts do not define any templates and therefore cannot be deployed. -type: application - -# This is the chart version. This version number should be incremented each time you make changes -# to the chart and its templates, including the app version. -# Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 0.2.0 - -# This is the version number of the application being deployed. This version number should be -# incremented each time you make changes to the application. Versions are not expected to -# follow Semantic Versioning. They should reflect the version the application is using. -# It is recommended to use it with quotes. -appVersion: "1.16.0" diff --git a/charts/approvalflow/templates/NOTES.txt b/charts/approvalflow/templates/NOTES.txt deleted file mode 100644 index 01065df1..00000000 --- a/charts/approvalflow/templates/NOTES.txt +++ /dev/null @@ -1,22 +0,0 @@ -1. Get the application URL by running these commands: -{{- if .Values.ingress.enabled }} -{{- range $host := .Values.ingress.hosts }} - {{- range .paths }} - http{{ if $.Values.ingress.tls }}s{{ end }}://{{ $host.host }}{{ .path }} - {{- end }} -{{- end }} -{{- else if contains "NodePort" .Values.service.type }} - export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "approvalflow.fullname" . }}) - export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}") - echo http://$NODE_IP:$NODE_PORT -{{- else if contains "LoadBalancer" .Values.service.type }} - NOTE: It may take a few minutes for the LoadBalancer IP to be available. - You can watch the status of by running 'kubectl get --namespace {{ .Release.Namespace }} svc -w {{ include "approvalflow.fullname" . }}' - export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "approvalflow.fullname" . }} --template "{{"{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}") - echo http://$SERVICE_IP:{{ .Values.service.port }} -{{- else if contains "ClusterIP" .Values.service.type }} - export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name={{ include "approvalflow.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") - export CONTAINER_PORT=$(kubectl get pod --namespace {{ .Release.Namespace }} $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}") - echo "Visit http://127.0.0.1:8080 to use your application" - kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME 8080:$CONTAINER_PORT -{{- end }} diff --git a/charts/approvalflow/templates/_helpers.tpl b/charts/approvalflow/templates/_helpers.tpl deleted file mode 100644 index 004d895a..00000000 --- a/charts/approvalflow/templates/_helpers.tpl +++ /dev/null @@ -1,62 +0,0 @@ -{{/* -Expand the name of the chart. -*/}} -{{- define "approvalflow.name" -}} -{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }} -{{- end }} - -{{/* -Create a default fully qualified app name. -We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). -If release name contains chart name it will be used as a full name. -*/}} -{{- define "approvalflow.fullname" -}} -{{- if .Values.fullnameOverride }} -{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }} -{{- else }} -{{- $name := default .Chart.Name .Values.nameOverride }} -{{- if contains $name .Release.Name }} -{{- .Release.Name | trunc 63 | trimSuffix "-" }} -{{- else }} -{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }} -{{- end }} -{{- end }} -{{- end }} - -{{/* -Create chart name and version as used by the chart label. -*/}} -{{- define "approvalflow.chart" -}} -{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} -{{- end }} - -{{/* -Common labels -*/}} -{{- define "approvalflow.labels" -}} -helm.sh/chart: {{ include "approvalflow.chart" . }} -{{ include "approvalflow.selectorLabels" . }} -{{- if .Chart.AppVersion }} -app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} -{{- end }} -app.kubernetes.io/managed-by: {{ .Release.Service }} -{{- end }} - -{{/* -Selector labels -*/}} -{{- define "approvalflow.selectorLabels" -}} -app.kubernetes.io/name: {{ include "approvalflow.name" . }} -app.kubernetes.io/instance: {{ .Release.Name }} -{{- end }} - -{{/* -Create the name of the service account to use -*/}} -{{- define "approvalflow.serviceAccountName" -}} -{{- if .Values.serviceAccount.create }} -{{- default (include "approvalflow.fullname" .) .Values.serviceAccount.name }} -{{- else }} -{{- default "default" .Values.serviceAccount.name }} -{{- end }} -{{- end }} diff --git a/charts/approvalflow/templates/deployment.yaml b/charts/approvalflow/templates/deployment.yaml deleted file mode 100644 index 9c2c41d0..00000000 --- a/charts/approvalflow/templates/deployment.yaml +++ /dev/null @@ -1,141 +0,0 @@ -{{ $release := .Release.Name }} -{{ $ocEnv := regexFind "([^-]*$)" .Release.Namespace }} -{{ $domain := .Values.global.vanityURL }} -{{ $isPR := hasPrefix "pr-" .Release.Name }} -## Derived release name -{{ $drn := ternary $release $ocEnv $isPR }} -{{ $isProd := contains "prod" $ocEnv }} -# -apiVersion: apps/v1 -kind: Deployment -metadata: - name: {{ include "approvalflow.fullname" . }} - labels: - {{- include "approvalflow.labels" . | nindent 4 }} -spec: - {{- if not .Values.autoscaling.enabled }} - replicas: {{ .Values.replicaCount }} - {{- end }} - selector: - matchLabels: - {{- include "approvalflow.selectorLabels" . | nindent 6 }} - template: - metadata: - annotations: - prometheus.io/scrape: 'true' - prometheus.io/port: "8080" - vault.hashicorp.com/agent-inject: 'true' - vault.hashicorp.com/agent-pre-populate-only: 'true' - vault.hashicorp.com/auth-path: auth/k8s-gold - vault.hashicorp.com/namespace: platform-services - vault.hashicorp.com/agent-requests-cpu: 5m - vault.hashicorp.com/agent-limits-cpu: 10m - vault.hashicorp.com/agent-requests-mem: 20Mi - vault.hashicorp.com/role: {{ .Values.global.vault.role }} # licenseplate-nonprod or licenseplate-prod are your options - vault.hashicorp.com/agent-inject-secret-DIAM-common: {{ .Values.global.vault.role }}/{{ .Values.global.vault.path }}DIAM-common - vault.hashicorp.com/agent-inject-template-DIAM-common: | - {{`{{- with secret `}}"{{ .Values.global.vault.role }}/{{ .Values.global.vault.path }}DIAM-common"{{` }} - {{- range $k, $v := .Data.data }} - {{ $k }}="{{ $v }}"{{ end -}} - {{- end `}} }} - vault.hashicorp.com/agent-inject-secret-DIAM-approvalflow: {{ .Values.global.vault.role }}/{{ .Values.global.vault.path }}DIAM-approvalflow - vault.hashicorp.com/agent-inject-template-DIAM-approvalflow: | - {{`{{- with secret `}}"{{ .Values.global.vault.role }}/{{ .Values.global.vault.path }}DIAM-approvalflow"{{` }} - {{- range $k, $v := .Data.data }} - {{ $k }}="{{ $v }}"{{ end -}} - {{- end `}} }} - vault.hashicorp.com/agent-inject-secret-DIAM-keycloak: {{ .Values.global.vault.role }}/{{ .Values.global.vault.path }}DIAM-keycloak - vault.hashicorp.com/agent-inject-template-DIAM-keycloak: | - {{`{{- with secret `}}"{{ .Values.global.vault.role }}/{{ .Values.global.vault.path }}DIAM-keycloak"{{` }} - {{- range $k, $v := .Data.data }} - {{ $k }}="{{ $v }}"{{ end -}} - {{- end `}} }} - {{- if .Values.global.commit_sha }} - commit_sha: {{ .Values.global.commit_sha }} - {{- end}} - {{- with .Values.podAnnotations }} - {{- toYaml . | nindent 8 }} - {{- end }} - labels: - {{- include "approvalflow.selectorLabels" . | nindent 8 }} - spec: - {{- with .Values.imagePullSecrets }} - imagePullSecrets: - {{- toYaml . | nindent 8 }} - {{- end }} - serviceAccountName: {{ .Values.global.licenseplate }}-vault - securityContext: - {{- toYaml .Values.podSecurityContext | nindent 8 }} - - containers: - - name: {{ .Chart.Name }} - securityContext: - {{- toYaml .Values.securityContext | nindent 12 }} - image: "{{ .Values.global.image.registry }}/{{ .Values.image.repository }}:{{ .Values.global.image.tag | default .Chart.AppVersion }}" - imagePullPolicy: {{ .Values.image.pullPolicy }} - env: - - name: DOTNET_BUNDLE_EXTRACT_BASE_DIR - value: /tmp - - name: ApplicationUrl - value: "https://{{ if $isProd }}{{else}}{{ $release }}.{{end}}{{ $domain }}" - volumeMounts: - - name: truststore - mountPath: "/opt/kafka/certificates" - readOnly: true - ports: - - name: http - containerPort: 8080 - protocol: TCP - livenessProbe: - httpGet: - path: /health/liveness - port: http - scheme: HTTP - timeoutSeconds: 5 - periodSeconds: 30 - successThreshold: 1 - failureThreshold: 3 - # livenessProbe: //turn this on for TEST and PROD - # httpGet: - # path: /health/liveness - # port: http - # timeoutSeconds: 1 - # periodSeconds: 10 - # successThreshold: 1 - # failureThreshold: 3 - # startupProbe: - # httpGet: - # path: /health/liveness - # port: http - # scheme: HTTP - # timeoutSeconds: 1 - # periodSeconds: 10 - # successThreshold: 1 - # failureThreshold: 30 - # readinessProbe: - # httpGet: - # path: / - # port: http - - resources: - {{- toYaml .Values.resources | nindent 12 }} - {{- with .Values.nodeSelector }} - nodeSelector: - {{- toYaml . | nindent 8 }} - {{- end }} - {{- with .Values.affinity }} - affinity: - {{- toYaml . | nindent 8 }} - {{- end }} - {{- with .Values.tolerations }} - tolerations: - {{- toYaml . | nindent 8 }} - {{- end }} - volumes: - - name: truststore - secret: - secretName: kafka-cluster-client-truststore - - name: truststore-key - secret: - secretName: kafka-cluster-client-key - diff --git a/charts/approvalflow/templates/hpa.yaml b/charts/approvalflow/templates/hpa.yaml deleted file mode 100644 index b155bd91..00000000 --- a/charts/approvalflow/templates/hpa.yaml +++ /dev/null @@ -1,28 +0,0 @@ -{{- if .Values.autoscaling.enabled }} -apiVersion: autoscaling/v2beta1 -kind: HorizontalPodAutoscaler -metadata: - name: {{ include "approvalflow.fullname" . }} - labels: - {{- include "approvalflow.labels" . | nindent 4 }} -spec: - scaleTargetRef: - apiVersion: apps/v1 - kind: Deployment - name: {{ include "approvalflow.fullname" . }} - minReplicas: {{ .Values.autoscaling.minReplicas }} - maxReplicas: {{ .Values.autoscaling.maxReplicas }} - metrics: - {{- if .Values.autoscaling.targetCPUUtilizationPercentage }} - - type: Resource - resource: - name: cpu - targetAverageUtilization: {{ .Values.autoscaling.targetCPUUtilizationPercentage }} - {{- end }} - {{- if .Values.autoscaling.targetMemoryUtilizationPercentage }} - - type: Resource - resource: - name: memory - targetAverageUtilization: {{ .Values.autoscaling.targetMemoryUtilizationPercentage }} - {{- end }} -{{- end }} diff --git a/charts/approvalflow/templates/ingress.yaml b/charts/approvalflow/templates/ingress.yaml deleted file mode 100644 index 0270969c..00000000 --- a/charts/approvalflow/templates/ingress.yaml +++ /dev/null @@ -1,61 +0,0 @@ -{{- if .Values.ingress.enabled -}} -{{- $fullName := include "approvalflow.fullname" . -}} -{{- $svcPort := .Values.service.port -}} -{{- if and .Values.ingress.className (not (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion)) }} - {{- if not (hasKey .Values.ingress.annotations "kubernetes.io/ingress.class") }} - {{- $_ := set .Values.ingress.annotations "kubernetes.io/ingress.class" .Values.ingress.className}} - {{- end }} -{{- end }} -{{- if semverCompare ">=1.19-0" .Capabilities.KubeVersion.GitVersion -}} -apiVersion: networking.k8s.io/v1 -{{- else if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion -}} -apiVersion: networking.k8s.io/v1beta1 -{{- else -}} -apiVersion: extensions/v1beta1 -{{- end }} -kind: Ingress -metadata: - name: {{ $fullName }} - labels: - {{- include "approvalflow.labels" . | nindent 4 }} - {{- with .Values.ingress.annotations }} - annotations: - {{- toYaml . | nindent 4 }} - {{- end }} -spec: - {{- if and .Values.ingress.className (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion) }} - ingressClassName: {{ .Values.ingress.className }} - {{- end }} - {{- if .Values.ingress.tls }} - tls: - {{- range .Values.ingress.tls }} - - hosts: - {{- range .hosts }} - - {{ . | quote }} - {{- end }} - secretName: {{ .secretName }} - {{- end }} - {{- end }} - rules: - {{- range .Values.ingress.hosts }} - - host: {{ .host | quote }} - http: - paths: - {{- range .paths }} - - path: {{ .path }} - {{- if and .pathType (semverCompare ">=1.18-0" $.Capabilities.KubeVersion.GitVersion) }} - pathType: {{ .pathType }} - {{- end }} - backend: - {{- if semverCompare ">=1.19-0" $.Capabilities.KubeVersion.GitVersion }} - service: - name: {{ $fullName }} - port: - number: {{ $svcPort }} - {{- else }} - serviceName: {{ $fullName }} - servicePort: {{ $svcPort }} - {{- end }} - {{- end }} - {{- end }} -{{- end }} diff --git a/charts/approvalflow/templates/secrets.yaml b/charts/approvalflow/templates/secrets.yaml deleted file mode 100644 index 3686079e..00000000 --- a/charts/approvalflow/templates/secrets.yaml +++ /dev/null @@ -1,9 +0,0 @@ -apiVersion: v1 -kind: Secret -metadata: - name: {{ include "approvalflow.fullname" . }}-api - labels: - {{- include "approvalflow.labels" . | nindent 4 }} -type: Opaque -stringData: - url: http://{{ include "approvalflow.fullname" . }}.{{ .Values.global.licenseplate }}-{{ .Values.global.environment }}.svc.cluster.local:8080/api \ No newline at end of file diff --git a/charts/approvalflow/templates/service.yaml b/charts/approvalflow/templates/service.yaml deleted file mode 100644 index 583a35aa..00000000 --- a/charts/approvalflow/templates/service.yaml +++ /dev/null @@ -1,15 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - name: {{ include "approvalflow.fullname" . }} - labels: - {{- include "approvalflow.labels" . | nindent 4 }} -spec: - type: {{ .Values.service.type }} - ports: - - port: {{ .Values.service.port }} - targetPort: http - protocol: TCP - name: http - selector: - {{- include "approvalflow.selectorLabels" . | nindent 4 }} diff --git a/charts/approvalflow/templates/serviceaccount.yaml b/charts/approvalflow/templates/serviceaccount.yaml deleted file mode 100644 index 4c8214ba..00000000 --- a/charts/approvalflow/templates/serviceaccount.yaml +++ /dev/null @@ -1,12 +0,0 @@ -{{- if .Values.serviceAccount.create -}} -apiVersion: v1 -kind: ServiceAccount -metadata: - name: {{ include "approvalflow.serviceAccountName" . }} - labels: - {{- include "approvalflow.labels" . | nindent 4 }} - {{- with .Values.serviceAccount.annotations }} - annotations: - {{- toYaml . | nindent 4 }} - {{- end }} -{{- end }} diff --git a/charts/approvalflow/templates/tests/test-connection.yaml b/charts/approvalflow/templates/tests/test-connection.yaml deleted file mode 100644 index 6995a578..00000000 --- a/charts/approvalflow/templates/tests/test-connection.yaml +++ /dev/null @@ -1,15 +0,0 @@ -apiVersion: v1 -kind: Pod -metadata: - name: "{{ include "approvalflow.fullname" . }}-test-connection" - labels: - {{- include "approvalflow.labels" . | nindent 4 }} - annotations: - "helm.sh/hook": test -spec: - containers: - - name: wget - image: busybox - command: ['wget'] - args: ['{{ include "approvalflow.fullname" . }}:{{ .Values.service.port }}'] - restartPolicy: Never diff --git a/charts/approvalflow/values.yaml b/charts/approvalflow/values.yaml deleted file mode 100644 index c0ec2bff..00000000 --- a/charts/approvalflow/values.yaml +++ /dev/null @@ -1,92 +0,0 @@ -# Default values for webapi. -# This is a YAML-formatted file. -# Declare variables to be passed into your templates. - -global: - vanityURL: "approval-e27db1-dev.apps.gold.devops.gov.bc.ca" - commit_sha: "" - licenseplate: "e27db1" - environment: "dev" - image: - registry: image-registry.openshift-image-registry.svc:5000/e27db1-tools - tag: develop - -replicaCount: 1 -aspnetcore: - environment: Staging - -image: - repository: approvalflow - pullPolicy: Always - - -imagePullSecrets: [] -nameOverride: "" -fullnameOverride: "" - -trustStoreCertificateSecretName: "kafka-client-truststore" - -database: - # .NET Core database connection string - dbConnectionString: 'host=postgresql;port=5432;database=approvalflow;username=postgres;password=postgres' - databaseHost: postgresql - # If secret exists, it should contain key "database_url". specify the name of the secret below. - # existingSecret: - -# Run migrations pre-install and pre-upgrade -migrations: - enabled: false - -serviceAccount: - # Specifies whether a service account should be created - create: false - # Annotations to add to the service account - annotations: {} - # The name of the service account to use. - # If not set and create is true, a name is generated using the fullname template - name: "" - -podAnnotations: {} - -podSecurityContext: {} - # fsGroup: 2000 - -securityContext: {} - # capabilities: - # drop: - # - ALL - # readOnlyRootFilesystem: true - # runAsNonRoot: true - # runAsUser: 1000 - -service: - type: ClusterIP - port: 8080 - -ingress: - enabled: false - className: "" - annotations: - route.openshift.io/termination: "passthrough" - tls: {} - -resources: - limits: - cpu: 100m - memory: 128Mi - requests: - cpu: 15m - memory: 50Mi - -autoscaling: - enabled: false - minReplicas: 1 - maxReplicas: 100 - targetCPUUtilizationPercentage: 80 - # targetMemoryUtilizationPercentage: 80 - -nodeSelector: {} - -tolerations: [] - -affinity: {} diff --git a/charts/diam-config/.helmignore b/charts/diam-config/.helmignore deleted file mode 100644 index 0e8a0eb3..00000000 --- a/charts/diam-config/.helmignore +++ /dev/null @@ -1,23 +0,0 @@ -# Patterns to ignore when building packages. -# This supports shell glob matching, relative path matching, and -# negation (prefixed with !). Only one pattern per line. -.DS_Store -# Common VCS dirs -.git/ -.gitignore -.bzr/ -.bzrignore -.hg/ -.hgignore -.svn/ -# Common backup files -*.swp -*.bak -*.tmp -*.orig -*~ -# Various IDEs -.project -.idea/ -*.tmproj -.vscode/ diff --git a/charts/diam-config/Chart.yaml b/charts/diam-config/Chart.yaml deleted file mode 100644 index 30fcb1e5..00000000 --- a/charts/diam-config/Chart.yaml +++ /dev/null @@ -1,24 +0,0 @@ -apiVersion: v2 -name: diam-config -description: A Helm chart for DIAM Configuration Services - -# A chart can be either an 'application' or a 'library' chart. -# -# Application charts are a collection of templates that can be packaged into versioned archives -# to be deployed. -# -# Library charts provide useful utilities or functions for the chart developer. They're included as -# a dependency of application charts to inject those utilities and functions into the diam-config -# pipeline. Library charts do not define any templates and therefore cannot be deployed. -type: application - -# This is the chart version. This version number should be incremented each time you make changes -# to the chart and its templates, including the app version. -# Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 0.1.0 - -# This is the version number of the application being deployed. This version number should be -# incremented each time you make changes to the application. Versions are not expected to -# follow Semantic Versioning. They should reflect the version the application is using. -# It is recommended to use it with quotes. -appVersion: "1.16.0" diff --git a/charts/diam-config/templates/NOTES.txt b/charts/diam-config/templates/NOTES.txt deleted file mode 100644 index 01065df1..00000000 --- a/charts/diam-config/templates/NOTES.txt +++ /dev/null @@ -1,22 +0,0 @@ -1. Get the application URL by running these commands: -{{- if .Values.ingress.enabled }} -{{- range $host := .Values.ingress.hosts }} - {{- range .paths }} - http{{ if $.Values.ingress.tls }}s{{ end }}://{{ $host.host }}{{ .path }} - {{- end }} -{{- end }} -{{- else if contains "NodePort" .Values.service.type }} - export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "approvalflow.fullname" . }}) - export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}") - echo http://$NODE_IP:$NODE_PORT -{{- else if contains "LoadBalancer" .Values.service.type }} - NOTE: It may take a few minutes for the LoadBalancer IP to be available. - You can watch the status of by running 'kubectl get --namespace {{ .Release.Namespace }} svc -w {{ include "approvalflow.fullname" . }}' - export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "approvalflow.fullname" . }} --template "{{"{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}") - echo http://$SERVICE_IP:{{ .Values.service.port }} -{{- else if contains "ClusterIP" .Values.service.type }} - export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name={{ include "approvalflow.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") - export CONTAINER_PORT=$(kubectl get pod --namespace {{ .Release.Namespace }} $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}") - echo "Visit http://127.0.0.1:8080 to use your application" - kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME 8080:$CONTAINER_PORT -{{- end }} diff --git a/charts/diam-config/templates/_helpers.tpl b/charts/diam-config/templates/_helpers.tpl deleted file mode 100644 index de94a23b..00000000 --- a/charts/diam-config/templates/_helpers.tpl +++ /dev/null @@ -1,62 +0,0 @@ -{{/* -Expand the name of the chart. -*/}} -{{- define "diam-config.name" -}} -{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }} -{{- end }} - -{{/* -Create a default fully qualified app name. -We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). -If release name contains chart name it will be used as a full name. -*/}} -{{- define "diam-config.fullname" -}} -{{- if .Values.fullnameOverride }} -{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }} -{{- else }} -{{- $name := default .Chart.Name .Values.nameOverride }} -{{- if contains $name .Release.Name }} -{{- .Release.Name | trunc 63 | trimSuffix "-" }} -{{- else }} -{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }} -{{- end }} -{{- end }} -{{- end }} - -{{/* -Create chart name and version as used by the chart label. -*/}} -{{- define "diam-config.chart" -}} -{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} -{{- end }} - -{{/* -Common labels -*/}} -{{- define "diam-config.labels" -}} -helm.sh/chart: {{ include "diam-config.chart" . }} -{{ include "diam-config.selectorLabels" . }} -{{- if .Chart.AppVersion }} -app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} -{{- end }} -app.kubernetes.io/managed-by: {{ .Release.Service }} -{{- end }} - -{{/* -Selector labels -*/}} -{{- define "diam-config.selectorLabels" -}} -app.kubernetes.io/name: {{ include "diam-config.name" . }} -app.kubernetes.io/instance: {{ .Release.Name }} -{{- end }} - -{{/* -Create the name of the service account to use -*/}} -{{- define "diam-config.serviceAccountName" -}} -{{- if .Values.serviceAccount.create }} -{{- default (include "diam-config.fullname" .) .Values.serviceAccount.name }} -{{- else }} -{{- default "default" .Values.serviceAccount.name }} -{{- end }} -{{- end }} diff --git a/charts/diam-config/templates/deployment.yaml b/charts/diam-config/templates/deployment.yaml deleted file mode 100644 index 240c6cc4..00000000 --- a/charts/diam-config/templates/deployment.yaml +++ /dev/null @@ -1,109 +0,0 @@ -{{ $release := .Release.Name }} -{{ $ocEnv := regexFind "([^-]*$)" .Release.Namespace }} -{{ $domain := .Values.global.vanityURL }} -{{ $isPR := hasPrefix "pr-" .Release.Name }} -## Derived release name -{{ $drn := ternary $release $ocEnv $isPR }} -{{ $isProd := contains "prod" $ocEnv }} -# -apiVersion: apps/v1 -kind: Deployment -metadata: - name: {{ include "diam-config.fullname" . }} - labels: - {{- include "diam-config.labels" . | nindent 4 }} -spec: - {{- if not .Values.autoscaling.enabled }} - replicas: {{ .Values.replicaCount }} - {{- end }} - selector: - matchLabels: - {{- include "diam-config.selectorLabels" . | nindent 6 }} - template: - metadata: - annotations: - prometheus.io/scrape: 'true' - prometheus.io/port: "8080" - vault.hashicorp.com/agent-inject: 'true' - vault.hashicorp.com/agent-pre-populate-only: 'true' - vault.hashicorp.com/auth-path: auth/k8s-gold - vault.hashicorp.com/namespace: platform-services - vault.hashicorp.com/agent-requests-cpu: 5m - vault.hashicorp.com/agent-limits-cpu: 10m - vault.hashicorp.com/agent-requests-mem: 20Mi - vault.hashicorp.com/role: {{ .Values.global.vault.role }} # licenseplate-nonprod or licenseplate-prod are your options - vault.hashicorp.com/agent-inject-secret-DIAM-config: {{ .Values.global.vault.role }}/{{ .Values.global.vault.path }}DIAM-config - vault.hashicorp.com/agent-inject-template-DIAM-config: | - {{`{{- with secret `}}"{{ .Values.global.vault.role }}/{{ .Values.global.vault.path }}DIAM-config"{{` }} - {{- range $k, $v := .Data.data }} - {{ $k }}="{{ $v }}"{{ end -}} - {{- end `}} }} - {{- if .Values.global.commit_sha }} - commit_sha: {{ .Values.global.commit_sha }} - {{- end}} - {{- with .Values.podAnnotations }} - {{- toYaml . | nindent 8 }} - {{- end }} - labels: - {{- include "diam-config.selectorLabels" . | nindent 8 }} - spec: - {{- with .Values.imagePullSecrets }} - imagePullSecrets: - {{- toYaml . | nindent 8 }} - {{- end }} - serviceAccountName: {{ .Values.global.licenseplate }}-vault - securityContext: - {{- toYaml .Values.podSecurityContext | nindent 8 }} - - containers: - - name: {{ .Chart.Name }} - securityContext: - {{- toYaml .Values.securityContext | nindent 12 }} - image: "{{ .Values.global.image.registry }}/{{ .Values.image.repository }}:{{ .Values.global.image.tag | default .Chart.AppVersion }}" - imagePullPolicy: {{ .Values.image.pullPolicy }} - env: - - name: DOTNET_BUNDLE_EXTRACT_BASE_DIR - value: /tmp - - name: ApplicationUrl - value: "https://{{ if $isProd }}{{else}}{{ $release }}.{{end}}{{ $domain }}" - volumeMounts: - ports: - - name: http - containerPort: 8080 - protocol: TCP - livenessProbe: - httpGet: - path: /health/liveness - port: http - scheme: HTTP - timeoutSeconds: 5 - periodSeconds: 30 - successThreshold: 1 - failureThreshold: 3 - startupProbe: - httpGet: - path: /health/liveness - port: http - scheme: HTTP - timeoutSeconds: 10 - periodSeconds: 30 - successThreshold: 1 - failureThreshold: 5 - - resources: - {{- toYaml .Values.resources | nindent 12 }} - {{- with .Values.nodeSelector }} - nodeSelector: - {{- toYaml . | nindent 8 }} - {{- end }} - {{- with .Values.affinity }} - affinity: - {{- toYaml . | nindent 8 }} - {{- end }} - {{- with .Values.tolerations }} - tolerations: - {{- toYaml . | nindent 8 }} - {{- end }} - volumes: - - diff --git a/charts/diam-config/templates/hpa.yaml b/charts/diam-config/templates/hpa.yaml deleted file mode 100644 index 5ebaa23d..00000000 --- a/charts/diam-config/templates/hpa.yaml +++ /dev/null @@ -1,28 +0,0 @@ -{{- if .Values.autoscaling.enabled }} -apiVersion: autoscaling/v2beta1 -kind: HorizontalPodAutoscaler -metadata: - name: {{ include "diam-config.fullname" . }} - labels: - {{- include "diam-config.labels" . | nindent 4 }} -spec: - scaleTargetRef: - apiVersion: apps/v1 - kind: Deployment - name: {{ include "diam-config.fullname" . }} - minReplicas: {{ .Values.autoscaling.minReplicas }} - maxReplicas: {{ .Values.autoscaling.maxReplicas }} - metrics: - {{- if .Values.autoscaling.targetCPUUtilizationPercentage }} - - type: Resource - resource: - name: cpu - targetAverageUtilization: {{ .Values.autoscaling.targetCPUUtilizationPercentage }} - {{- end }} - {{- if .Values.autoscaling.targetMemoryUtilizationPercentage }} - - type: Resource - resource: - name: memory - targetAverageUtilization: {{ .Values.autoscaling.targetMemoryUtilizationPercentage }} - {{- end }} -{{- end }} diff --git a/charts/diam-config/templates/ingress.yaml b/charts/diam-config/templates/ingress.yaml deleted file mode 100644 index 746e7e36..00000000 --- a/charts/diam-config/templates/ingress.yaml +++ /dev/null @@ -1,61 +0,0 @@ -{{- if .Values.ingress.enabled -}} -{{- $fullName := include "diam-config.fullname" . -}} -{{- $svcPort := .Values.service.port -}} -{{- if and .Values.ingress.className (not (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion)) }} - {{- if not (hasKey .Values.ingress.annotations "kubernetes.io/ingress.class") }} - {{- $_ := set .Values.ingress.annotations "kubernetes.io/ingress.class" .Values.ingress.className}} - {{- end }} -{{- end }} -{{- if semverCompare ">=1.19-0" .Capabilities.KubeVersion.GitVersion -}} -apiVersion: networking.k8s.io/v1 -{{- else if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion -}} -apiVersion: networking.k8s.io/v1beta1 -{{- else -}} -apiVersion: extensions/v1beta1 -{{- end }} -kind: Ingress -metadata: - name: {{ $fullName }} - labels: - {{- include "diam-config.labels" . | nindent 4 }} - {{- with .Values.ingress.annotations }} - annotations: - {{- toYaml . | nindent 4 }} - {{- end }} -spec: - {{- if and .Values.ingress.className (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion) }} - ingressClassName: {{ .Values.ingress.className }} - {{- end }} - {{- if .Values.ingress.tls }} - tls: - {{- range .Values.ingress.tls }} - - hosts: - {{- range .hosts }} - - {{ . | quote }} - {{- end }} - secretName: {{ .secretName }} - {{- end }} - {{- end }} - rules: - {{- range .Values.ingress.hosts }} - - host: {{ .host | quote }} - http: - paths: - {{- range .paths }} - - path: {{ .path }} - {{- if and .pathType (semverCompare ">=1.18-0" $.Capabilities.KubeVersion.GitVersion) }} - pathType: {{ .pathType }} - {{- end }} - backend: - {{- if semverCompare ">=1.19-0" $.Capabilities.KubeVersion.GitVersion }} - service: - name: {{ $fullName }} - port: - number: {{ $svcPort }} - {{- else }} - serviceName: {{ $fullName }} - servicePort: {{ $svcPort }} - {{- end }} - {{- end }} - {{- end }} -{{- end }} diff --git a/charts/diam-config/templates/secrets.yaml b/charts/diam-config/templates/secrets.yaml deleted file mode 100644 index 05827902..00000000 --- a/charts/diam-config/templates/secrets.yaml +++ /dev/null @@ -1,9 +0,0 @@ -apiVersion: v1 -kind: Secret -metadata: - name: {{ include "diam-config.fullname" . }}-api - labels: - {{- include "diam-config.labels" . | nindent 4 }} -type: Opaque -stringData: - url: http://{{ include "diam-config.fullname" . }}.{{ .Values.global.licenseplate }}-{{ .Values.global.environment }}.svc.cluster.local:8080/api \ No newline at end of file diff --git a/charts/diam-config/templates/service.yaml b/charts/diam-config/templates/service.yaml deleted file mode 100644 index 06ee89de..00000000 --- a/charts/diam-config/templates/service.yaml +++ /dev/null @@ -1,15 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - name: {{ include "diam-config.fullname" . }} - labels: - {{- include "diam-config.labels" . | nindent 4 }} -spec: - type: {{ .Values.service.type }} - ports: - - port: {{ .Values.service.port }} - targetPort: http - protocol: TCP - name: http - selector: - {{- include "diam-config.selectorLabels" . | nindent 4 }} diff --git a/charts/diam-config/templates/serviceaccount.yaml b/charts/diam-config/templates/serviceaccount.yaml deleted file mode 100644 index dea3917a..00000000 --- a/charts/diam-config/templates/serviceaccount.yaml +++ /dev/null @@ -1,12 +0,0 @@ -{{- if .Values.serviceAccount.create -}} -apiVersion: v1 -kind: ServiceAccount -metadata: - name: {{ include "diam-config.serviceAccountName" . }} - labels: - {{- include "diam-config.labels" . | nindent 4 }} - {{- with .Values.serviceAccount.annotations }} - annotations: - {{- toYaml . | nindent 4 }} - {{- end }} -{{- end }} diff --git a/charts/diam-config/templates/tests/test-connection.yaml b/charts/diam-config/templates/tests/test-connection.yaml deleted file mode 100644 index fa55b45d..00000000 --- a/charts/diam-config/templates/tests/test-connection.yaml +++ /dev/null @@ -1,15 +0,0 @@ -apiVersion: v1 -kind: Pod -metadata: - name: "{{ include "diam-config.fullname" . }}-test-connection" - labels: - {{- include "diam-config.labels" . | nindent 4 }} - annotations: - "helm.sh/hook": test -spec: - containers: - - name: wget - image: busybox - command: ['wget'] - args: ['{{ include "diam-config.fullname" . }}:{{ .Values.service.port }}'] - restartPolicy: Never diff --git a/charts/diam-config/values.yaml b/charts/diam-config/values.yaml deleted file mode 100644 index 027a14f2..00000000 --- a/charts/diam-config/values.yaml +++ /dev/null @@ -1,90 +0,0 @@ -# Default values for webapi. -# This is a YAML-formatted file. -# Declare variables to be passed into your templates. - -global: - vanityURL: "diam-config-e27db1-dev.apps.gold.devops.gov.bc.ca" - commit_sha: "" - licenseplate: "e27db1" - environment: "dev" - image: - registry: image-registry.openshift-image-registry.svc:5000/e27db1-tools - tag: develop - -replicaCount: 1 -aspnetcore: - environment: Staging - -image: - repository: diam-config - pullPolicy: Always - - -imagePullSecrets: [] -nameOverride: "" -fullnameOverride: "" - -database: - # .NET Core database connection string - dbConnectionString: 'host=postgresql;port=5432;database=approvalflow;username=postgres;password=postgres' - databaseHost: postgresql - # If secret exists, it should contain key "database_url". specify the name of the secret below. - # existingSecret: - -# Run migrations pre-install and pre-upgrade -migrations: - enabled: false - -serviceAccount: - # Specifies whether a service account should be created - create: false - # Annotations to add to the service account - annotations: {} - # The name of the service account to use. - # If not set and create is true, a name is generated using the fullname template - name: "" - -podAnnotations: {} - -podSecurityContext: {} - # fsGroup: 2000 - -securityContext: {} - # capabilities: - # drop: - # - ALL - # readOnlyRootFilesystem: true - # runAsNonRoot: true - # runAsUser: 1000 - -service: - type: ClusterIP - port: 8080 - -ingress: - enabled: false - className: "" - annotations: - route.openshift.io/termination: "passthrough" - tls: {} - -resources: - limits: - cpu: 100m - memory: 128Mi - requests: - cpu: 15m - memory: 50Mi - -autoscaling: - enabled: false - minReplicas: 1 - maxReplicas: 100 - targetCPUUtilizationPercentage: 80 - # targetMemoryUtilizationPercentage: 80 - -nodeSelector: {} - -tolerations: [] - -affinity: {} diff --git a/charts/edt-casemgmt/.helmignore b/charts/edt-casemgmt/.helmignore deleted file mode 100644 index 0e8a0eb3..00000000 --- a/charts/edt-casemgmt/.helmignore +++ /dev/null @@ -1,23 +0,0 @@ -# Patterns to ignore when building packages. -# This supports shell glob matching, relative path matching, and -# negation (prefixed with !). Only one pattern per line. -.DS_Store -# Common VCS dirs -.git/ -.gitignore -.bzr/ -.bzrignore -.hg/ -.hgignore -.svn/ -# Common backup files -*.swp -*.bak -*.tmp -*.orig -*~ -# Various IDEs -.project -.idea/ -*.tmproj -.vscode/ diff --git a/charts/edt-casemgmt/Chart.yaml b/charts/edt-casemgmt/Chart.yaml deleted file mode 100644 index f986f414..00000000 --- a/charts/edt-casemgmt/Chart.yaml +++ /dev/null @@ -1,24 +0,0 @@ -apiVersion: v2 -name: edt-casemgmt -description: A Helm chart for Kubernetes - -# A chart can be either an 'application' or a 'library' chart. -# -# Application charts are a collection of templates that can be packaged into versioned archives -# to be deployed. -# -# Library charts provide useful utilities or functions for the chart developer. They're included as -# a dependency of application charts to inject those utilities and functions into the rendering -# pipeline. Library charts do not define any templates and therefore cannot be deployed. -type: application - -# This is the chart version. This version number should be incremented each time you make changes -# to the chart and its templates, including the app version. -# Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 0.3.0 - -# This is the version number of the application being deployed. This version number should be -# incremented each time you make changes to the application. Versions are not expected to -# follow Semantic Versioning. They should reflect the version the application is using. -# It is recommended to use it with quotes. -appVersion: "1.16.0" diff --git a/charts/edt-casemgmt/templates/NOTES.txt b/charts/edt-casemgmt/templates/NOTES.txt deleted file mode 100644 index e7b0953c..00000000 --- a/charts/edt-casemgmt/templates/NOTES.txt +++ /dev/null @@ -1,22 +0,0 @@ -1. Get the application URL by running these commands: -{{- if .Values.ingress.enabled }} -{{- range $host := .Values.ingress.hosts }} - {{- range .paths }} - http{{ if $.Values.ingress.tls }}s{{ end }}://{{ $host.host }}{{ .path }} - {{- end }} -{{- end }} -{{- else if contains "NodePort" .Values.service.type }} - export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "edt-service.fullname" . }}) - export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}") - echo http://$NODE_IP:$NODE_PORT -{{- else if contains "LoadBalancer" .Values.service.type }} - NOTE: It may take a few minutes for the LoadBalancer IP to be available. - You can watch the status of by running 'kubectl get --namespace {{ .Release.Namespace }} svc -w {{ include "edt-service.fullname" . }}' - export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "edt-service.fullname" . }} --template "{{"{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}") - echo http://$SERVICE_IP:{{ .Values.service.port }} -{{- else if contains "ClusterIP" .Values.service.type }} - export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name={{ include "edt-service.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") - export CONTAINER_PORT=$(kubectl get pod --namespace {{ .Release.Namespace }} $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}") - echo "Visit http://127.0.0.1:8080 to use your application" - kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME 8080:$CONTAINER_PORT -{{- end }} diff --git a/charts/edt-casemgmt/templates/_helpers.tpl b/charts/edt-casemgmt/templates/_helpers.tpl deleted file mode 100644 index 38d99c05..00000000 --- a/charts/edt-casemgmt/templates/_helpers.tpl +++ /dev/null @@ -1,62 +0,0 @@ -{{/* -Expand the name of the chart. -*/}} -{{- define "edt-casemgmt.name" -}} -{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }} -{{- end }} - -{{/* -Create a default fully qualified app name. -We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). -If release name contains chart name it will be used as a full name. -*/}} -{{- define "edt-casemgmt.fullname" -}} -{{- if .Values.fullnameOverride }} -{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }} -{{- else }} -{{- $name := default .Chart.Name .Values.nameOverride }} -{{- if contains $name .Release.Name }} -{{- .Release.Name | trunc 63 | trimSuffix "-" }} -{{- else }} -{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }} -{{- end }} -{{- end }} -{{- end }} - -{{/* -Create chart name and version as used by the chart label. -*/}} -{{- define "edt-casemgmt.chart" -}} -{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} -{{- end }} - -{{/* -Common labels -*/}} -{{- define "edt-casemgmt.labels" -}} -helm.sh/chart: {{ include "edt-casemgmt.chart" . }} -{{ include "edt-casemgmt.selectorLabels" . }} -{{- if .Chart.AppVersion }} -app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} -{{- end }} -app.kubernetes.io/managed-by: {{ .Release.Service }} -{{- end }} - -{{/* -Selector labels -*/}} -{{- define "edt-casemgmt.selectorLabels" -}} -app.kubernetes.io/name: {{ include "edt-casemgmt.name" . }} -app.kubernetes.io/instance: {{ .Release.Name }} -{{- end }} - -{{/* -Create the name of the service account to use -*/}} -{{- define "edt-casemgmt.serviceAccountName" -}} -{{- if .Values.serviceAccount.create }} -{{- default (include "edt-casemgmt.fullname" .) .Values.serviceAccount.name }} -{{- else }} -{{- default "default" .Values.serviceAccount.name }} -{{- end }} -{{- end }} diff --git a/charts/edt-casemgmt/templates/deployment.yaml b/charts/edt-casemgmt/templates/deployment.yaml deleted file mode 100644 index d4e2f1ed..00000000 --- a/charts/edt-casemgmt/templates/deployment.yaml +++ /dev/null @@ -1,141 +0,0 @@ -{{ $release := .Release.Name }} -{{ $ocEnv := regexFind "([^-]*$)" .Release.Namespace }} -{{ $domain := .Values.global.vanityURL }} -{{ $isPR := hasPrefix "pr-" .Release.Name }} -## Derived release name -{{ $drn := ternary $release $ocEnv $isPR }} -{{ $isProd := contains "prod" $ocEnv }} -# -apiVersion: apps/v1 -kind: Deployment -metadata: - name: {{ include "edt-casemgmt.fullname" . }} - labels: - {{- include "edt-casemgmt.labels" . | nindent 4 }} -spec: - {{- if not .Values.autoscaling.enabled }} - replicas: {{ .Values.replicaCount }} - {{- end }} - selector: - matchLabels: - {{- include "edt-casemgmt.selectorLabels" . | nindent 6 }} - template: - metadata: - annotations: - prometheus.io/scrape: 'true' - prometheus.io/port: "8080" - vault.hashicorp.com/agent-inject: 'true' - vault.hashicorp.com/agent-pre-populate-only: 'true' - vault.hashicorp.com/auth-path: auth/k8s-gold - vault.hashicorp.com/namespace: platform-services - vault.hashicorp.com/agent-requests-cpu: 5m - vault.hashicorp.com/agent-limits-cpu: 10m - vault.hashicorp.com/agent-requests-mem: 20Mi - vault.hashicorp.com/role: {{ .Values.global.vault.role }} # licenseplate-nonprod or licenseplate-prod are your options - vault.hashicorp.com/agent-inject-secret-DIAM-common: {{ .Values.global.vault.role }}/{{ .Values.global.vault.path }}DIAM-common - vault.hashicorp.com/agent-inject-template-DIAM-common: | - {{`{{- with secret `}}"{{ .Values.global.vault.role }}/{{ .Values.global.vault.path }}DIAM-common"{{` }} - {{- range $k, $v := .Data.data }} - {{ $k }}="{{ $v }}"{{ end -}} - {{- end `}} }} - vault.hashicorp.com/agent-inject-secret-DIAM-edt-casemgmt: {{ .Values.global.vault.role }}/{{ .Values.global.vault.path }}DIAM-edt-casemgmt - vault.hashicorp.com/agent-inject-template-DIAM-edt-casemgmt: | - {{`{{- with secret `}}"{{ .Values.global.vault.role }}/{{ .Values.global.vault.path }}DIAM-edt-casemgmt"{{` }} - {{- range $k, $v := .Data.data }} - {{ $k }}="{{ $v }}"{{ end -}} - {{- end `}} }} - vault.hashicorp.com/agent-inject-secret-DIAM-keycloak: {{ .Values.global.vault.role }}/{{ .Values.global.vault.path }}DIAM-keycloak - vault.hashicorp.com/agent-inject-template-DIAM-keycloak: | - {{`{{- with secret `}}"{{ .Values.global.vault.role }}/{{ .Values.global.vault.path }}DIAM-keycloak"{{` }} - {{- range $k, $v := .Data.data }} - {{ $k }}="{{ $v }}"{{ end -}} - {{- end `}} }} - {{- if .Values.global.commit_sha }} - commit_sha: {{ .Values.global.commit_sha }} - {{- end}} - {{- with .Values.podAnnotations }} - {{- toYaml . | nindent 8 }} - {{- end }} - labels: - {{- include "edt-casemgmt.selectorLabels" . | nindent 8 }} - spec: - {{- with .Values.imagePullSecrets }} - imagePullSecrets: - {{- toYaml . | nindent 8 }} - {{- end }} - serviceAccountName: {{ .Values.global.licenseplate }}-vault - securityContext: - {{- toYaml .Values.podSecurityContext | nindent 8 }} - - containers: - - name: {{ .Chart.Name }} - securityContext: - {{- toYaml .Values.securityContext | nindent 12 }} - image: "{{ .Values.global.image.registry }}/{{ .Values.image.repository }}:{{ .Values.global.image.tag | default .Chart.AppVersion }}" - imagePullPolicy: {{ .Values.image.pullPolicy }} - env: - - name: DOTNET_BUNDLE_EXTRACT_BASE_DIR - value: /tmp - - name: ApplicationUrl - value: "https://{{ if $isProd }}{{else}}{{ $release }}.{{end}}{{ $domain }}" - volumeMounts: - - name: truststore - mountPath: "/opt/kafka/certificates" - readOnly: true - envFrom: - - secretRef: - name: ches - - configMapRef: - name: mail-settings - - configMapRef: - name: retry-policy - ports: - - name: http - containerPort: 8080 - protocol: TCP - livenessProbe: - httpGet: - path: /health/liveness - port: http - scheme: HTTP - timeoutSeconds: 10 - periodSeconds: 30 - successThreshold: 1 - failureThreshold: 5 - - # startupProbe: - # httpGet: - # path: /health/liveness - # port: http - # scheme: HTTP - # timeoutSeconds: 1 - # periodSeconds: 10 - # successThreshold: 1 - # failureThreshold: 30 - # readinessProbe: - # httpGet: - # path: / - # port: http - - resources: - {{- toYaml .Values.resources | nindent 12 }} - {{- with .Values.nodeSelector }} - nodeSelector: - {{- toYaml . | nindent 8 }} - {{- end }} - {{- with .Values.affinity }} - affinity: - {{- toYaml . | nindent 8 }} - {{- end }} - {{- with .Values.tolerations }} - tolerations: - {{- toYaml . | nindent 8 }} - {{- end }} - volumes: - - name: truststore - secret: - secretName: kafka-cluster-client-truststore - - name: truststore-key - secret: - secretName: kafka-cluster-client-key - diff --git a/charts/edt-casemgmt/templates/hpa.yaml b/charts/edt-casemgmt/templates/hpa.yaml deleted file mode 100644 index 2473f611..00000000 --- a/charts/edt-casemgmt/templates/hpa.yaml +++ /dev/null @@ -1,28 +0,0 @@ -{{- if .Values.autoscaling.enabled }} -apiVersion: autoscaling/v2beta1 -kind: HorizontalPodAutoscaler -metadata: - name: {{ include "edt-casemgmt.fullname" . }} - labels: - {{- include "edt-casemgmt.labels" . | nindent 4 }} -spec: - scaleTargetRef: - apiVersion: apps/v1 - kind: Deployment - name: {{ include "edt-casemgmt.fullname" . }} - minReplicas: {{ .Values.autoscaling.minReplicas }} - maxReplicas: {{ .Values.autoscaling.maxReplicas }} - metrics: - {{- if .Values.autoscaling.targetCPUUtilizationPercentage }} - - type: Resource - resource: - name: cpu - targetAverageUtilization: {{ .Values.autoscaling.targetCPUUtilizationPercentage }} - {{- end }} - {{- if .Values.autoscaling.targetMemoryUtilizationPercentage }} - - type: Resource - resource: - name: memory - targetAverageUtilization: {{ .Values.autoscaling.targetMemoryUtilizationPercentage }} - {{- end }} -{{- end }} diff --git a/charts/edt-casemgmt/templates/ingress.yaml b/charts/edt-casemgmt/templates/ingress.yaml deleted file mode 100644 index fc2ce0e5..00000000 --- a/charts/edt-casemgmt/templates/ingress.yaml +++ /dev/null @@ -1,61 +0,0 @@ -{{- if .Values.ingress.enabled -}} -{{- $fullName := include "edt-casemgmt.fullname" . -}} -{{- $svcPort := .Values.service.port -}} -{{- if and .Values.ingress.className (not (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion)) }} - {{- if not (hasKey .Values.ingress.annotations "kubernetes.io/ingress.class") }} - {{- $_ := set .Values.ingress.annotations "kubernetes.io/ingress.class" .Values.ingress.className}} - {{- end }} -{{- end }} -{{- if semverCompare ">=1.19-0" .Capabilities.KubeVersion.GitVersion -}} -apiVersion: networking.k8s.io/v1 -{{- else if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion -}} -apiVersion: networking.k8s.io/v1beta1 -{{- else -}} -apiVersion: extensions/v1beta1 -{{- end }} -kind: Ingress -metadata: - name: {{ $fullName }} - labels: - {{- include "edt-casemgmt.labels" . | nindent 4 }} - {{- with .Values.ingress.annotations }} - annotations: - {{- toYaml . | nindent 4 }} - {{- end }} -spec: - {{- if and .Values.ingress.className (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion) }} - ingressClassName: {{ .Values.ingress.className }} - {{- end }} - {{- if .Values.ingress.tls }} - tls: - {{- range .Values.ingress.tls }} - - hosts: - {{- range .hosts }} - - {{ . | quote }} - {{- end }} - secretName: {{ .secretName }} - {{- end }} - {{- end }} - rules: - {{- range .Values.ingress.hosts }} - - host: {{ .host | quote }} - http: - paths: - {{- range .paths }} - - path: {{ .path }} - {{- if and .pathType (semverCompare ">=1.18-0" $.Capabilities.KubeVersion.GitVersion) }} - pathType: {{ .pathType }} - {{- end }} - backend: - {{- if semverCompare ">=1.19-0" $.Capabilities.KubeVersion.GitVersion }} - service: - name: {{ $fullName }} - port: - number: {{ $svcPort }} - {{- else }} - serviceName: {{ $fullName }} - servicePort: {{ $svcPort }} - {{- end }} - {{- end }} - {{- end }} -{{- end }} diff --git a/charts/edt-casemgmt/templates/migrations.yaml b/charts/edt-casemgmt/templates/migrations.yaml deleted file mode 100644 index e7463aa8..00000000 --- a/charts/edt-casemgmt/templates/migrations.yaml +++ /dev/null @@ -1,50 +0,0 @@ -{{- if .Values.migrations.enabled }} -{{ $release := .Release.Name }} -{{ $ocEnv := regexFind "([^-]*$)" .Release.Namespace }} -{{ $isPR := hasPrefix "pr-" .Release.Name }} -## Derived release name -{{ $drn := ternary $release $ocEnv $isPR }} -# -apiVersion: batch/v1 -kind: Job -metadata: - name: {{ include "edt-casemgmt.fullname" . }}-migrations - annotations: - helm.sh/hook: pre-install, pre-upgrade - helm.sh/hook-weight: "10" - labels: - {{- include "edt-casemgmt.labels" . | nindent 4 }} -spec: - ttlSecondsAfterFinished: 30 - template: - spec: - containers: - - name: migrations - image: {{ .Values.global.image.registry }}/{{ .Values.image.repository }}:{{ .Values.global.image.tag | default .Chart.AppVersion }} - imagePullPolicy: Always - command: ['./efbundle','--verbose', '--connection', '$(ConnectionStrings__CaseManagementDataStore)'] - env: - - name: DB_HOST - value: pidp-postgresql - - name: DB_PASSWORD - valueFrom: - secretKeyRef: - name: {{ include "edt-casemgmt.fullname" . }}-database - key: database-password - - name: DB_USER - valueFrom: - secretKeyRef: - name: {{ include "edt-casemgmt.fullname" . }}-database - key: database-username - - name: DATABASE_NAME - value: casemgmt - - name: DOTNET_BUNDLE_EXTRACT_BASE_DIR - value: /tmp - - name: ConnectionStrings__CaseManagementDataStore - valueFrom: - configMapKeyRef: - name: edt-casemgmt-api-database - key: CONNECTION_STRINGS_DB - restartPolicy: Never - backoffLimit: 3 -{{- end }} \ No newline at end of file diff --git a/charts/edt-casemgmt/templates/secrets.yaml b/charts/edt-casemgmt/templates/secrets.yaml deleted file mode 100644 index cfa5e637..00000000 --- a/charts/edt-casemgmt/templates/secrets.yaml +++ /dev/null @@ -1,9 +0,0 @@ -apiVersion: v1 -kind: Secret -metadata: - name: {{ include "edt-casemgmt.fullname" . }}-api - labels: - {{- include "edt-casemgmt.labels" . | nindent 4 }} -type: Opaque -stringData: - url: http://{{ include "edt-casemgmt.fullname" . }}.{{ .Values.global.licenseplate }}-{{ .Values.global.environment }}.svc.cluster.local:8080/api \ No newline at end of file diff --git a/charts/edt-casemgmt/templates/service.yaml b/charts/edt-casemgmt/templates/service.yaml deleted file mode 100644 index 849017c4..00000000 --- a/charts/edt-casemgmt/templates/service.yaml +++ /dev/null @@ -1,15 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - name: {{ include "edt-casemgmt.fullname" . }} - labels: - {{- include "edt-casemgmt.labels" . | nindent 4 }} -spec: - type: {{ .Values.service.type }} - ports: - - port: {{ .Values.service.port }} - targetPort: http - protocol: TCP - name: http - selector: - {{- include "edt-casemgmt.selectorLabels" . | nindent 4 }} diff --git a/charts/edt-casemgmt/templates/serviceaccount.yaml b/charts/edt-casemgmt/templates/serviceaccount.yaml deleted file mode 100644 index 171ebde0..00000000 --- a/charts/edt-casemgmt/templates/serviceaccount.yaml +++ /dev/null @@ -1,12 +0,0 @@ -{{- if .Values.serviceAccount.create -}} -apiVersion: v1 -kind: ServiceAccount -metadata: - name: {{ include "edt-casemgmt.serviceAccountName" . }} - labels: - {{- include "edt-casemgmt.labels" . | nindent 4 }} - {{- with .Values.serviceAccount.annotations }} - annotations: - {{- toYaml . | nindent 4 }} - {{- end }} -{{- end }} diff --git a/charts/edt-casemgmt/templates/tests/test-connection.yaml b/charts/edt-casemgmt/templates/tests/test-connection.yaml deleted file mode 100644 index 7f5ade3f..00000000 --- a/charts/edt-casemgmt/templates/tests/test-connection.yaml +++ /dev/null @@ -1,15 +0,0 @@ -apiVersion: v1 -kind: Pod -metadata: - name: "{{ include "edt-casemgmt.fullname" . }}-test-connection" - labels: - {{- include "edt-casemgmt.labels" . | nindent 4 }} - annotations: - "helm.sh/hook": test -spec: - containers: - - name: wget - image: busybox - command: ['wget'] - args: ['{{ include "edt-casemgmt.fullname" . }}:{{ .Values.service.port }}'] - restartPolicy: Never diff --git a/charts/edt-casemgmt/values.yaml b/charts/edt-casemgmt/values.yaml deleted file mode 100644 index 8b44b913..00000000 --- a/charts/edt-casemgmt/values.yaml +++ /dev/null @@ -1,101 +0,0 @@ -# Default values for webapi. -# This is a YAML-formatted file. -# Declare variables to be passed into your templates. - -global: - vanityURL: "edt-casemgmt-e27db1-dev.apps.gold.devops.gov.bc.ca" - commit_sha: "" - licenseplate: "e27db1" - environment: "dev" - image: - registry: image-registry.openshift-image-registry.svc:5000/e27db1-tools - tag: develop - -replicaCount: 1 -aspnetcore: - environment: Staging - -image: - repository: edt-casemgmt - pullPolicy: Always - - -imagePullSecrets: [] -nameOverride: "" -fullnameOverride: "" - -trustStoreCertificateSecretName: "kafka-client-truststore" - -database: - # .NET Core database connection string - dbConnectionString: 'host=postgresql;port=5432;database=casemgmt;username=postgres;password=postgres' - databaseHost: postgresql - # If secret exists, it should contain key "database_url". specify the name of the secret below. - # existingSecret: - -# Run migrations pre-install and pre-upgrade -migrations: - enabled: true - -serviceAccount: - # Specifies whether a service account should be created - create: false - # Annotations to add to the service account - annotations: {} - # The name of the service account to use. - # If not set and create is true, a name is generated using the fullname template - name: "" - -podAnnotations: {} - -podSecurityContext: {} - # fsGroup: 2000 - -securityContext: {} - # capabilities: - # drop: - # - ALL - # readOnlyRootFilesystem: true - # runAsNonRoot: true - # runAsUser: 1000 - -service: - type: ClusterIP - port: 8080 - -ingress: - enabled: false - className: "" - annotations: {} - # kubernetes.io/ingress.class: nginx - # kubernetes.io/tls-acme: "true" - hosts: - - host: edt-casemgmt-e27db1-dev.apps.gold.devops.gov.bc.ca - paths: - - path: / - pathType: ImplementationSpecific - tls: [] - # - secretName: chart-example-tls - # hosts: - # - chart-example.local - -resources: - limits: - cpu: 100m - memory: 128Mi - requests: - cpu: 15m - memory: 50Mi - -autoscaling: - enabled: false - minReplicas: 1 - maxReplicas: 100 - targetCPUUtilizationPercentage: 80 - # targetMemoryUtilizationPercentage: 80 - -nodeSelector: {} - -tolerations: [] - -affinity: {} diff --git a/charts/edt-disclosure/.helmignore b/charts/edt-disclosure/.helmignore deleted file mode 100644 index 0e8a0eb3..00000000 --- a/charts/edt-disclosure/.helmignore +++ /dev/null @@ -1,23 +0,0 @@ -# Patterns to ignore when building packages. -# This supports shell glob matching, relative path matching, and -# negation (prefixed with !). Only one pattern per line. -.DS_Store -# Common VCS dirs -.git/ -.gitignore -.bzr/ -.bzrignore -.hg/ -.hgignore -.svn/ -# Common backup files -*.swp -*.bak -*.tmp -*.orig -*~ -# Various IDEs -.project -.idea/ -*.tmproj -.vscode/ diff --git a/charts/edt-disclosure/Chart.yaml b/charts/edt-disclosure/Chart.yaml deleted file mode 100644 index dc993d1e..00000000 --- a/charts/edt-disclosure/Chart.yaml +++ /dev/null @@ -1,24 +0,0 @@ -apiVersion: v2 -name: edt-disclosure -description: A Helm chart for EDT Disclosure Services - -# A chart can be either an 'application' or a 'library' chart. -# -# Application charts are a collection of templates that can be packaged into versioned archives -# to be deployed. -# -# Library charts provide useful utilities or functions for the chart developer. They're included as -# a dependency of application charts to inject those utilities and functions into the rendering -# pipeline. Library charts do not define any templates and therefore cannot be deployed. -type: application - -# This is the chart version. This version number should be incremented each time you make changes -# to the chart and its templates, including the app version. -# Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 0.9.0 - -# This is the version number of the application being deployed. This version number should be -# incremented each time you make changes to the application. Versions are not expected to -# follow Semantic Versioning. They should reflect the version the application is using. -# It is recommended to use it with quotes. -appVersion: "1.16.0" diff --git a/charts/edt-disclosure/templates/NOTES.txt b/charts/edt-disclosure/templates/NOTES.txt deleted file mode 100644 index b530660f..00000000 --- a/charts/edt-disclosure/templates/NOTES.txt +++ /dev/null @@ -1,22 +0,0 @@ -1. Get the application URL by running these commands: -{{- if .Values.ingress.enabled }} -{{- range $host := .Values.ingress.hosts }} - {{- range .paths }} - http{{ if $.Values.ingress.tls }}s{{ end }}://{{ $host.host }}{{ .path }} - {{- end }} -{{- end }} -{{- else if contains "NodePort" .Values.service.type }} - export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "edt-disclosure.fullname" . }}) - export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}") - echo http://$NODE_IP:$NODE_PORT -{{- else if contains "LoadBalancer" .Values.service.type }} - NOTE: It may take a few minutes for the LoadBalancer IP to be available. - You can watch the status of by running 'kubectl get --namespace {{ .Release.Namespace }} svc -w {{ include "edt-disclosure.fullname" . }}' - export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "edt-disclosure.fullname" . }} --template "{{"{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}") - echo http://$SERVICE_IP:{{ .Values.service.port }} -{{- else if contains "ClusterIP" .Values.service.type }} - export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name={{ include "edt-disclosure.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") - export CONTAINER_PORT=$(kubectl get pod --namespace {{ .Release.Namespace }} $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}") - echo "Visit http://127.0.0.1:8080 to use your application" - kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME 8080:$CONTAINER_PORT -{{- end }} diff --git a/charts/edt-disclosure/templates/_helpers.tpl b/charts/edt-disclosure/templates/_helpers.tpl deleted file mode 100644 index a7179687..00000000 --- a/charts/edt-disclosure/templates/_helpers.tpl +++ /dev/null @@ -1,62 +0,0 @@ -{{/* -Expand the name of the chart. -*/}} -{{- define "edt-disclosure.name" -}} -{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }} -{{- end }} - -{{/* -Create a default fully qualified app name. -We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). -If release name contains chart name it will be used as a full name. -*/}} -{{- define "edt-disclosure.fullname" -}} -{{- if .Values.fullnameOverride }} -{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }} -{{- else }} -{{- $name := default .Chart.Name .Values.nameOverride }} -{{- if contains $name .Release.Name }} -{{- .Release.Name | trunc 63 | trimSuffix "-" }} -{{- else }} -{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }} -{{- end }} -{{- end }} -{{- end }} - -{{/* -Create chart name and version as used by the chart label. -*/}} -{{- define "edt-disclosure.chart" -}} -{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} -{{- end }} - -{{/* -Common labels -*/}} -{{- define "edt-disclosure.labels" -}} -helm.sh/chart: {{ include "edt-disclosure.chart" . }} -{{ include "edt-disclosure.selectorLabels" . }} -{{- if .Chart.AppVersion }} -app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} -{{- end }} -app.kubernetes.io/managed-by: {{ .Release.Service }} -{{- end }} - -{{/* -Selector labels -*/}} -{{- define "edt-disclosure.selectorLabels" -}} -app.kubernetes.io/name: {{ include "edt-disclosure.name" . }} -app.kubernetes.io/instance: {{ .Release.Name }} -{{- end }} - -{{/* -Create the name of the service account to use -*/}} -{{- define "edt-disclosure.serviceAccountName" -}} -{{- if .Values.serviceAccount.create }} -{{- default (include "edt-disclosure.fullname" .) .Values.serviceAccount.name }} -{{- else }} -{{- default "default" .Values.serviceAccount.name }} -{{- end }} -{{- end }} diff --git a/charts/edt-disclosure/templates/deployment.yaml b/charts/edt-disclosure/templates/deployment.yaml deleted file mode 100644 index b320d94a..00000000 --- a/charts/edt-disclosure/templates/deployment.yaml +++ /dev/null @@ -1,141 +0,0 @@ -{{ $release := .Release.Name }} -{{ $ocEnv := regexFind "([^-]*$)" .Release.Namespace }} -{{ $domain := .Values.global.vanityURL }} -{{ $isPR := hasPrefix "pr-" .Release.Name }} -## Derived release name -{{ $drn := ternary $release $ocEnv $isPR }} -{{ $isProd := contains "prod" $ocEnv }} -# -apiVersion: apps/v1 -kind: Deployment -metadata: - annotations: - #prometheus.io/scrape: 'true' - #prometheus.io/port: "9090" - - name: {{ include "edt-disclosure.fullname" . }} - labels: - {{- include "edt-disclosure.labels" . | nindent 4 }} -spec: - {{- if not .Values.autoscaling.enabled }} - replicas: {{ .Values.replicaCount }} - {{- end }} - selector: - matchLabels: - {{- include "edt-disclosure.selectorLabels" . | nindent 6 }} - template: - metadata: - annotations: - prometheus.io/scrape: 'true' - prometheus.io/port: "8080" - vault.hashicorp.com/agent-inject: 'true' - vault.hashicorp.com/agent-pre-populate-only: 'true' - vault.hashicorp.com/auth-path: auth/k8s-gold - vault.hashicorp.com/namespace: platform-services - vault.hashicorp.com/agent-requests-cpu: 5m - vault.hashicorp.com/agent-limits-cpu: 10m - vault.hashicorp.com/agent-requests-mem: 20Mi - vault.hashicorp.com/role: {{ .Values.global.vault.role }} # licenseplate-nonprod or licenseplate-prod are your options - vault.hashicorp.com/agent-inject-secret-DIAM-common: {{ .Values.global.vault.role }}/{{ .Values.global.vault.path }}DIAM-common - vault.hashicorp.com/agent-inject-template-DIAM-common: | - {{`{{- with secret `}}"{{ .Values.global.vault.role }}/{{ .Values.global.vault.path }}DIAM-common"{{` }} - {{- range $k, $v := .Data.data }} - {{ $k }}="{{ $v }}"{{ end -}} - {{- end `}} }} - vault.hashicorp.com/agent-inject-secret-DIAM-disclosure: {{ .Values.global.vault.role }}/{{ .Values.global.vault.path }}DIAM-disclosure - vault.hashicorp.com/agent-inject-template-DIAM-disclosure: | - {{`{{- with secret `}}"{{ .Values.global.vault.role }}/{{ .Values.global.vault.path }}DIAM-disclosure"{{` }} - {{- range $k, $v := .Data.data }} - {{ $k }}="{{ $v }}"{{ end -}} - {{- end `}} }} - vault.hashicorp.com/agent-inject-secret-DIAM-keycloak: {{ .Values.global.vault.role }}/{{ .Values.global.vault.path }}DIAM-keycloak - vault.hashicorp.com/agent-inject-template-DIAM-keycloak: | - {{`{{- with secret `}}"{{ .Values.global.vault.role }}/{{ .Values.global.vault.path }}DIAM-keycloak"{{` }} - {{- range $k, $v := .Data.data }} - {{ $k }}="{{ $v }}"{{ end -}} - {{- end `}} }} - {{- if .Values.global.commit_sha }} - commit_sha: {{ .Values.global.commit_sha }} - {{- end}} - {{- with .Values.podAnnotations }} - {{- toYaml . | nindent 8 }} - {{- end }} - labels: - {{- include "edt-disclosure.selectorLabels" . | nindent 8 }} - spec: - serviceAccountName: {{ .Values.global.licenseplate }}-vault - {{- with .Values.imagePullSecrets }} - imagePullSecrets: - {{- toYaml . | nindent 8 }} - {{- end }} - securityContext: - {{- toYaml .Values.podSecurityContext | nindent 8 }} - - containers: - - name: {{ .Chart.Name }} - securityContext: - {{- toYaml .Values.securityContext | nindent 12 }} - image: "{{ .Values.global.image.registry }}/{{ .Values.image.repository }}:{{ .Values.global.image.tag | default .Chart.AppVersion }}" - imagePullPolicy: {{ .Values.image.pullPolicy }} - env: - - name: DOTNET_BUNDLE_EXTRACT_BASE_DIR - value: /tmp - - name: ApplicationUrl - value: "https://{{ if $isProd }}{{else}}{{ $release }}.{{end}}{{ $domain }}" - volumeMounts: - - name: truststore - mountPath: "/opt/kafka/certificates" - readOnly: true - envFrom: - - secretRef: - name: keycloak-secrets - ports: - - name: http - containerPort: 8080 - protocol: TCP - livenessProbe: - httpGet: - path: /health/liveness - port: http - scheme: HTTP - timeoutSeconds: 5 - periodSeconds: 30 - successThreshold: 1 - failureThreshold: 3 - - # startupProbe: - # httpGet: - # path: /health/liveness - # port: http - # scheme: HTTP - # timeoutSeconds: 1 - # periodSeconds: 10 - # successThreshold: 1 - # failureThreshold: 30 - # readinessProbe: - # httpGet: - # path: / - # port: http - - resources: - {{- toYaml .Values.resources | nindent 12 }} - {{- with .Values.nodeSelector }} - nodeSelector: - {{- toYaml . | nindent 8 }} - {{- end }} - {{- with .Values.affinity }} - affinity: - {{- toYaml . | nindent 8 }} - {{- end }} - {{- with .Values.tolerations }} - tolerations: - {{- toYaml . | nindent 8 }} - {{- end }} - volumes: - - name: truststore - secret: - secretName: kafka-cluster-client-truststore - - name: truststore-key - secret: - secretName: kafka-cluster-client-key - diff --git a/charts/edt-disclosure/templates/hpa.yaml b/charts/edt-disclosure/templates/hpa.yaml deleted file mode 100644 index e8a1f6b0..00000000 --- a/charts/edt-disclosure/templates/hpa.yaml +++ /dev/null @@ -1,28 +0,0 @@ -{{- if .Values.autoscaling.enabled }} -apiVersion: autoscaling/v2beta1 -kind: HorizontalPodAutoscaler -metadata: - name: {{ include "edt-disclosure.fullname" . }} - labels: - {{- include "edt-disclosure.labels" . | nindent 4 }} -spec: - scaleTargetRef: - apiVersion: apps/v1 - kind: Deployment - name: {{ include "edt-disclosure.fullname" . }} - minReplicas: {{ .Values.autoscaling.minReplicas }} - maxReplicas: {{ .Values.autoscaling.maxReplicas }} - metrics: - {{- if .Values.autoscaling.targetCPUUtilizationPercentage }} - - type: Resource - resource: - name: cpu - targetAverageUtilization: {{ .Values.autoscaling.targetCPUUtilizationPercentage }} - {{- end }} - {{- if .Values.autoscaling.targetMemoryUtilizationPercentage }} - - type: Resource - resource: - name: memory - targetAverageUtilization: {{ .Values.autoscaling.targetMemoryUtilizationPercentage }} - {{- end }} -{{- end }} diff --git a/charts/edt-disclosure/templates/ingress.yaml b/charts/edt-disclosure/templates/ingress.yaml deleted file mode 100644 index c38956d0..00000000 --- a/charts/edt-disclosure/templates/ingress.yaml +++ /dev/null @@ -1,61 +0,0 @@ -{{- if .Values.ingress.enabled -}} -{{- $fullName := include "edt-disclosure.fullname" . -}} -{{- $svcPort := .Values.service.port -}} -{{- if and .Values.ingress.className (not (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion)) }} - {{- if not (hasKey .Values.ingress.annotations "kubernetes.io/ingress.class") }} - {{- $_ := set .Values.ingress.annotations "kubernetes.io/ingress.class" .Values.ingress.className}} - {{- end }} -{{- end }} -{{- if semverCompare ">=1.19-0" .Capabilities.KubeVersion.GitVersion -}} -apiVersion: networking.k8s.io/v1 -{{- else if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion -}} -apiVersion: networking.k8s.io/v1beta1 -{{- else -}} -apiVersion: extensions/v1beta1 -{{- end }} -kind: Ingress -metadata: - name: {{ $fullName }} - labels: - {{- include "edt-disclosure.labels" . | nindent 4 }} - {{- with .Values.ingress.annotations }} - annotations: - {{- toYaml . | nindent 4 }} - {{- end }} -spec: - {{- if and .Values.ingress.className (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion) }} - ingressClassName: {{ .Values.ingress.className }} - {{- end }} - {{- if .Values.ingress.tls }} - tls: - {{- range .Values.ingress.tls }} - - hosts: - {{- range .hosts }} - - {{ . | quote }} - {{- end }} - secretName: {{ .secretName }} - {{- end }} - {{- end }} - rules: - {{- range .Values.ingress.hosts }} - - host: {{ .host | quote }} - http: - paths: - {{- range .paths }} - - path: {{ .path }} - {{- if and .pathType (semverCompare ">=1.18-0" $.Capabilities.KubeVersion.GitVersion) }} - pathType: {{ .pathType }} - {{- end }} - backend: - {{- if semverCompare ">=1.19-0" $.Capabilities.KubeVersion.GitVersion }} - service: - name: {{ $fullName }} - port: - number: {{ $svcPort }} - {{- else }} - serviceName: {{ $fullName }} - servicePort: {{ $svcPort }} - {{- end }} - {{- end }} - {{- end }} -{{- end }} diff --git a/charts/edt-disclosure/templates/secrets.yaml b/charts/edt-disclosure/templates/secrets.yaml deleted file mode 100644 index 4b4842bc..00000000 --- a/charts/edt-disclosure/templates/secrets.yaml +++ /dev/null @@ -1,9 +0,0 @@ -apiVersion: v1 -kind: Secret -metadata: - name: {{ include "edt-disclosure.fullname" . }}-api - labels: - {{- include "edt-disclosure.labels" . | nindent 4 }} -type: Opaque -stringData: - url: http://{{ include "edt-disclosure.fullname" . }}.{{ .Values.global.licenseplate }}-{{ .Values.global.environment }}.svc.cluster.local:8080/api \ No newline at end of file diff --git a/charts/edt-disclosure/templates/service.yaml b/charts/edt-disclosure/templates/service.yaml deleted file mode 100644 index 4e0ba394..00000000 --- a/charts/edt-disclosure/templates/service.yaml +++ /dev/null @@ -1,15 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - name: {{ include "edt-disclosure.fullname" . }} - labels: - {{- include "edt-disclosure.labels" . | nindent 4 }} -spec: - type: {{ .Values.service.type }} - ports: - - port: {{ .Values.service.port }} - targetPort: http - protocol: TCP - name: http - selector: - {{- include "edt-disclosure.selectorLabels" . | nindent 4 }} diff --git a/charts/edt-disclosure/templates/serviceaccount.yaml b/charts/edt-disclosure/templates/serviceaccount.yaml deleted file mode 100644 index 849ca9f2..00000000 --- a/charts/edt-disclosure/templates/serviceaccount.yaml +++ /dev/null @@ -1,12 +0,0 @@ -{{- if .Values.serviceAccount.create -}} -apiVersion: v1 -kind: ServiceAccount -metadata: - name: {{ include "edt-disclosure.serviceAccountName" . }} - labels: - {{- include "edt-disclosure.labels" . | nindent 4 }} - {{- with .Values.serviceAccount.annotations }} - annotations: - {{- toYaml . | nindent 4 }} - {{- end }} -{{- end }} diff --git a/charts/edt-disclosure/templates/tests/test-connection.yaml b/charts/edt-disclosure/templates/tests/test-connection.yaml deleted file mode 100644 index 215ee885..00000000 --- a/charts/edt-disclosure/templates/tests/test-connection.yaml +++ /dev/null @@ -1,15 +0,0 @@ -apiVersion: v1 -kind: Pod -metadata: - name: "{{ include "edt-disclosure.fullname" . }}-test-connection" - labels: - {{- include "edt-disclosure.labels" . | nindent 4 }} - annotations: - "helm.sh/hook": test -spec: - containers: - - name: wget - image: busybox - command: ['wget'] - args: ['{{ include "edt-disclosure.fullname" . }}:{{ .Values.service.port }}'] - restartPolicy: Never diff --git a/charts/edt-disclosure/values.yaml b/charts/edt-disclosure/values.yaml deleted file mode 100644 index 585b2d36..00000000 --- a/charts/edt-disclosure/values.yaml +++ /dev/null @@ -1,104 +0,0 @@ -# Default values for webapi. -# This is a YAML-formatted file. -# Declare variables to be passed into your templates. - -global: - vanityURL: "edt-disclosure-e27db1-dev.apps.gold.devops.gov.bc.ca" - commit_sha: "" - licenseplate: "e27db1" - environment: "dev" - vault: - role: '' - path: '' - image: - registry: image-registry.openshift-image-registry.svc:5000/e27db1-tools - tag: develop - -replicaCount: 1 -aspnetcore: - environment: Staging - -image: - repository: edt-disclosure - pullPolicy: Always - - -imagePullSecrets: [] -nameOverride: "" -fullnameOverride: "" - -trustStoreCertificateSecretName: "kafka-client-truststore" - -database: - # .NET Core database connection string - dbConnectionString: 'host=postgresql;port=5432;database=disclosure;username=postgres;password=postgres' - databaseHost: postgresql - # If secret exists, it should contain key "database_url". specify the name of the secret below. - # existingSecret: - -# Run migrations pre-install and pre-upgrade -migrations: - enabled: false - -serviceAccount: - # Specifies whether a service account should be created - create: false - # Annotations to add to the service account - annotations: {} - # The name of the service account to use. - # If not set and create is true, a name is generated using the fullname template - name: "" - -podAnnotations: {} - -podSecurityContext: {} - # fsGroup: 2000 - -securityContext: {} - # capabilities: - # drop: - # - ALL - # readOnlyRootFilesystem: true - # runAsNonRoot: true - # runAsUser: 1000 - -service: - type: ClusterIP - port: 8080 - -ingress: - enabled: false - className: "" - annotations: {} - # kubernetes.io/ingress.class: nginx - # kubernetes.io/tls-acme: "true" - hosts: - - host: edt-disclosure-e27db1-dev.apps.gold.devops.gov.bc.ca - paths: - - path: / - pathType: ImplementationSpecific - tls: [] - # - secretName: chart-example-tls - # hosts: - # - chart-example.local - -resources: - limits: - cpu: 100m - memory: 128Mi - requests: - cpu: 75m - memory: 50Mi - -autoscaling: - enabled: false - minReplicas: 1 - maxReplicas: 100 - targetCPUUtilizationPercentage: 80 - # targetMemoryUtilizationPercentage: 80 - -nodeSelector: {} - -tolerations: [] - -affinity: {} diff --git a/charts/edt-service/.helmignore b/charts/edt-service/.helmignore deleted file mode 100644 index 0e8a0eb3..00000000 --- a/charts/edt-service/.helmignore +++ /dev/null @@ -1,23 +0,0 @@ -# Patterns to ignore when building packages. -# This supports shell glob matching, relative path matching, and -# negation (prefixed with !). Only one pattern per line. -.DS_Store -# Common VCS dirs -.git/ -.gitignore -.bzr/ -.bzrignore -.hg/ -.hgignore -.svn/ -# Common backup files -*.swp -*.bak -*.tmp -*.orig -*~ -# Various IDEs -.project -.idea/ -*.tmproj -.vscode/ diff --git a/charts/edt-service/Chart.yaml b/charts/edt-service/Chart.yaml deleted file mode 100644 index 9698999e..00000000 --- a/charts/edt-service/Chart.yaml +++ /dev/null @@ -1,24 +0,0 @@ -apiVersion: v2 -name: edt-service -description: A Helm chart for Kubernetes - -# A chart can be either an 'application' or a 'library' chart. -# -# Application charts are a collection of templates that can be packaged into versioned archives -# to be deployed. -# -# Library charts provide useful utilities or functions for the chart developer. They're included as -# a dependency of application charts to inject those utilities and functions into the rendering -# pipeline. Library charts do not define any templates and therefore cannot be deployed. -type: application - -# This is the chart version. This version number should be incremented each time you make changes -# to the chart and its templates, including the app version. -# Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 0.3.0 - -# This is the version number of the application being deployed. This version number should be -# incremented each time you make changes to the application. Versions are not expected to -# follow Semantic Versioning. They should reflect the version the application is using. -# It is recommended to use it with quotes. -appVersion: "1.16.0" diff --git a/charts/edt-service/templates/NOTES.txt b/charts/edt-service/templates/NOTES.txt deleted file mode 100644 index e7b0953c..00000000 --- a/charts/edt-service/templates/NOTES.txt +++ /dev/null @@ -1,22 +0,0 @@ -1. Get the application URL by running these commands: -{{- if .Values.ingress.enabled }} -{{- range $host := .Values.ingress.hosts }} - {{- range .paths }} - http{{ if $.Values.ingress.tls }}s{{ end }}://{{ $host.host }}{{ .path }} - {{- end }} -{{- end }} -{{- else if contains "NodePort" .Values.service.type }} - export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "edt-service.fullname" . }}) - export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}") - echo http://$NODE_IP:$NODE_PORT -{{- else if contains "LoadBalancer" .Values.service.type }} - NOTE: It may take a few minutes for the LoadBalancer IP to be available. - You can watch the status of by running 'kubectl get --namespace {{ .Release.Namespace }} svc -w {{ include "edt-service.fullname" . }}' - export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "edt-service.fullname" . }} --template "{{"{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}") - echo http://$SERVICE_IP:{{ .Values.service.port }} -{{- else if contains "ClusterIP" .Values.service.type }} - export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name={{ include "edt-service.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") - export CONTAINER_PORT=$(kubectl get pod --namespace {{ .Release.Namespace }} $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}") - echo "Visit http://127.0.0.1:8080 to use your application" - kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME 8080:$CONTAINER_PORT -{{- end }} diff --git a/charts/edt-service/templates/_helpers.tpl b/charts/edt-service/templates/_helpers.tpl deleted file mode 100644 index b8ca47c4..00000000 --- a/charts/edt-service/templates/_helpers.tpl +++ /dev/null @@ -1,62 +0,0 @@ -{{/* -Expand the name of the chart. -*/}} -{{- define "edt-service.name" -}} -{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }} -{{- end }} - -{{/* -Create a default fully qualified app name. -We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). -If release name contains chart name it will be used as a full name. -*/}} -{{- define "edt-service.fullname" -}} -{{- if .Values.fullnameOverride }} -{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }} -{{- else }} -{{- $name := default .Chart.Name .Values.nameOverride }} -{{- if contains $name .Release.Name }} -{{- .Release.Name | trunc 63 | trimSuffix "-" }} -{{- else }} -{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }} -{{- end }} -{{- end }} -{{- end }} - -{{/* -Create chart name and version as used by the chart label. -*/}} -{{- define "edt-service.chart" -}} -{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} -{{- end }} - -{{/* -Common labels -*/}} -{{- define "edt-service.labels" -}} -helm.sh/chart: {{ include "edt-service.chart" . }} -{{ include "edt-service.selectorLabels" . }} -{{- if .Chart.AppVersion }} -app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} -{{- end }} -app.kubernetes.io/managed-by: {{ .Release.Service }} -{{- end }} - -{{/* -Selector labels -*/}} -{{- define "edt-service.selectorLabels" -}} -app.kubernetes.io/name: {{ include "edt-service.name" . }} -app.kubernetes.io/instance: {{ .Release.Name }} -{{- end }} - -{{/* -Create the name of the service account to use -*/}} -{{- define "edt-service.serviceAccountName" -}} -{{- if .Values.serviceAccount.create }} -{{- default (include "edt-service.fullname" .) .Values.serviceAccount.name }} -{{- else }} -{{- default "default" .Values.serviceAccount.name }} -{{- end }} -{{- end }} diff --git a/charts/edt-service/templates/deployment.yaml b/charts/edt-service/templates/deployment.yaml deleted file mode 100644 index f81fa17a..00000000 --- a/charts/edt-service/templates/deployment.yaml +++ /dev/null @@ -1,150 +0,0 @@ -{{ $release := .Release.Name }} -{{ $ocEnv := regexFind "([^-]*$)" .Release.Namespace }} -{{ $domain := .Values.global.vanityURL }} -{{ $isPR := hasPrefix "pr-" .Release.Name }} -## Derived release name -{{ $drn := ternary $release $ocEnv $isPR }} -{{ $isProd := contains "prod" $ocEnv }} -# -apiVersion: apps/v1 -kind: Deployment -metadata: - name: {{ include "edt-service.fullname" . }} - labels: - {{- include "edt-service.labels" . | nindent 4 }} -spec: - {{- if not .Values.autoscaling.enabled }} - replicas: {{ .Values.replicaCount }} - {{- end }} - selector: - matchLabels: - {{- include "edt-service.selectorLabels" . | nindent 6 }} - template: - metadata: - annotations: - prometheus.io/scrape: 'true' - prometheus.io/port: "8080" - vault.hashicorp.com/agent-inject: 'true' - vault.hashicorp.com/agent-pre-populate-only: 'true' - vault.hashicorp.com/auth-path: auth/k8s-gold - vault.hashicorp.com/namespace: platform-services - vault.hashicorp.com/agent-requests-cpu: 5m - vault.hashicorp.com/agent-limits-cpu: 10m - vault.hashicorp.com/agent-requests-mem: 20Mi - vault.hashicorp.com/role: {{ .Values.global.vault.role }} # licenseplate-nonprod or licenseplate-prod are your options - vault.hashicorp.com/agent-inject-secret-DIAM-common: {{ .Values.global.vault.role }}/{{ .Values.global.vault.path }}DIAM-common - vault.hashicorp.com/agent-inject-template-DIAM-common: | - {{`{{- with secret `}}"{{ .Values.global.vault.role }}/{{ .Values.global.vault.path }}DIAM-common"{{` }} - {{- range $k, $v := .Data.data }} - {{ $k }}="{{ $v }}"{{ end -}} - {{- end `}} }} - vault.hashicorp.com/agent-inject-secret-DIAM-edt-core: {{ .Values.global.vault.role }}/{{ .Values.global.vault.path }}DIAM-edt-core - vault.hashicorp.com/agent-inject-template-DIAM-edt-core: | - {{`{{- with secret `}}"{{ .Values.global.vault.role }}/{{ .Values.global.vault.path }}DIAM-edt-core"{{` }} - {{- range $k, $v := .Data.data }} - {{ $k }}="{{ $v }}"{{ end -}} - {{- end `}} }} - vault.hashicorp.com/agent-inject-secret-DIAM-keycloak: {{ .Values.global.vault.role }}/{{ .Values.global.vault.path }}DIAM-keycloak - vault.hashicorp.com/agent-inject-template-DIAM-keycloak: | - {{`{{- with secret `}}"{{ .Values.global.vault.role }}/{{ .Values.global.vault.path }}DIAM-keycloak"{{` }} - {{- range $k, $v := .Data.data }} - {{ $k }}="{{ $v }}"{{ end -}} - {{- end `}} }} - {{- if .Values.global.commit_sha }} - commit_sha: {{ .Values.global.commit_sha }} - {{- end}} - {{- with .Values.podAnnotations }} - {{- toYaml . | nindent 8 }} - {{- end }} - labels: - {{- include "edt-service.selectorLabels" . | nindent 8 }} - spec: - {{- with .Values.imagePullSecrets }} - imagePullSecrets: - {{- toYaml . | nindent 8 }} - {{- end }} - serviceAccountName: {{ .Values.global.licenseplate }}-vault - securityContext: - {{- toYaml .Values.podSecurityContext | nindent 8 }} - - containers: - - name: {{ .Chart.Name }} - securityContext: - {{- toYaml .Values.securityContext | nindent 12 }} - image: "{{ .Values.global.image.registry }}/{{ .Values.image.repository }}:{{ .Values.global.image.tag | default .Chart.AppVersion }}" - imagePullPolicy: {{ .Values.image.pullPolicy }} - env: - - name: USER_CREATION_PLAINTEXT_TOPIC - value: digitalevidence-usercreation-plain-topic - - name: DOTNET_BUNDLE_EXTRACT_BASE_DIR - value: /tmp - - name: ApplicationUrl - value: "https://{{ if $isProd }}{{else}}{{ $release }}.{{end}}{{ $domain }}" - volumeMounts: - - name: truststore - mountPath: "/opt/kafka/certificates" - readOnly: true - envFrom: - - secretRef: - name: ches - - configMapRef: - name: mail-settings - - configMapRef: - name: retry-policy - ports: - - name: http - containerPort: 8080 - protocol: TCP - livenessProbe: - httpGet: - path: /health/liveness - port: http - scheme: HTTP - timeoutSeconds: 5 - periodSeconds: 30 - successThreshold: 1 - failureThreshold: 3 - # livenessProbe: //turn this on for TEST and PROD - # httpGet: - # path: /health/liveness - # port: http - # timeoutSeconds: 1 - # periodSeconds: 10 - # successThreshold: 1 - # failureThreshold: 3 - # startupProbe: - # httpGet: - # path: /health/liveness - # port: http - # scheme: HTTP - # timeoutSeconds: 1 - # periodSeconds: 10 - # successThreshold: 1 - # failureThreshold: 30 - # readinessProbe: - # httpGet: - # path: / - # port: http - - resources: - {{- toYaml .Values.resources | nindent 12 }} - {{- with .Values.nodeSelector }} - nodeSelector: - {{- toYaml . | nindent 8 }} - {{- end }} - {{- with .Values.affinity }} - affinity: - {{- toYaml . | nindent 8 }} - {{- end }} - {{- with .Values.tolerations }} - tolerations: - {{- toYaml . | nindent 8 }} - {{- end }} - volumes: - - name: truststore - secret: - secretName: kafka-cluster-client-truststore - - name: truststore-key - secret: - secretName: kafka-cluster-client-key - diff --git a/charts/edt-service/templates/hpa.yaml b/charts/edt-service/templates/hpa.yaml deleted file mode 100644 index c85f5f72..00000000 --- a/charts/edt-service/templates/hpa.yaml +++ /dev/null @@ -1,28 +0,0 @@ -{{- if .Values.autoscaling.enabled }} -apiVersion: autoscaling/v2beta1 -kind: HorizontalPodAutoscaler -metadata: - name: {{ include "edt-service.fullname" . }} - labels: - {{- include "edt-service.labels" . | nindent 4 }} -spec: - scaleTargetRef: - apiVersion: apps/v1 - kind: Deployment - name: {{ include "edt-service.fullname" . }} - minReplicas: {{ .Values.autoscaling.minReplicas }} - maxReplicas: {{ .Values.autoscaling.maxReplicas }} - metrics: - {{- if .Values.autoscaling.targetCPUUtilizationPercentage }} - - type: Resource - resource: - name: cpu - targetAverageUtilization: {{ .Values.autoscaling.targetCPUUtilizationPercentage }} - {{- end }} - {{- if .Values.autoscaling.targetMemoryUtilizationPercentage }} - - type: Resource - resource: - name: memory - targetAverageUtilization: {{ .Values.autoscaling.targetMemoryUtilizationPercentage }} - {{- end }} -{{- end }} diff --git a/charts/edt-service/templates/ingress.yaml b/charts/edt-service/templates/ingress.yaml deleted file mode 100644 index 156c0efa..00000000 --- a/charts/edt-service/templates/ingress.yaml +++ /dev/null @@ -1,61 +0,0 @@ -{{- if .Values.ingress.enabled -}} -{{- $fullName := include "edt-service.fullname" . -}} -{{- $svcPort := .Values.service.port -}} -{{- if and .Values.ingress.className (not (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion)) }} - {{- if not (hasKey .Values.ingress.annotations "kubernetes.io/ingress.class") }} - {{- $_ := set .Values.ingress.annotations "kubernetes.io/ingress.class" .Values.ingress.className}} - {{- end }} -{{- end }} -{{- if semverCompare ">=1.19-0" .Capabilities.KubeVersion.GitVersion -}} -apiVersion: networking.k8s.io/v1 -{{- else if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion -}} -apiVersion: networking.k8s.io/v1beta1 -{{- else -}} -apiVersion: extensions/v1beta1 -{{- end }} -kind: Ingress -metadata: - name: {{ $fullName }} - labels: - {{- include "edt-service.labels" . | nindent 4 }} - {{- with .Values.ingress.annotations }} - annotations: - {{- toYaml . | nindent 4 }} - {{- end }} -spec: - {{- if and .Values.ingress.className (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion) }} - ingressClassName: {{ .Values.ingress.className }} - {{- end }} - {{- if .Values.ingress.tls }} - tls: - {{- range .Values.ingress.tls }} - - hosts: - {{- range .hosts }} - - {{ . | quote }} - {{- end }} - secretName: {{ .secretName }} - {{- end }} - {{- end }} - rules: - {{- range .Values.ingress.hosts }} - - host: {{ .host | quote }} - http: - paths: - {{- range .paths }} - - path: {{ .path }} - {{- if and .pathType (semverCompare ">=1.18-0" $.Capabilities.KubeVersion.GitVersion) }} - pathType: {{ .pathType }} - {{- end }} - backend: - {{- if semverCompare ">=1.19-0" $.Capabilities.KubeVersion.GitVersion }} - service: - name: {{ $fullName }} - port: - number: {{ $svcPort }} - {{- else }} - serviceName: {{ $fullName }} - servicePort: {{ $svcPort }} - {{- end }} - {{- end }} - {{- end }} -{{- end }} diff --git a/charts/edt-service/templates/migrations.yaml b/charts/edt-service/templates/migrations.yaml deleted file mode 100644 index 0cdbc24f..00000000 --- a/charts/edt-service/templates/migrations.yaml +++ /dev/null @@ -1,51 +0,0 @@ -{{- if .Values.migrations.enabled }} -{{ $release := .Release.Name }} -{{ $ocEnv := regexFind "([^-]*$)" .Release.Namespace }} -{{ $isPR := hasPrefix "pr-" .Release.Name }} -## Derived release name -{{ $drn := ternary $release $ocEnv $isPR }} -# -apiVersion: batch/v1 -kind: Job -metadata: - name: {{ include "edt-service.fullname" . }}-migrations - annotations: - helm.sh/hook: pre-install, pre-upgrade - helm.sh/hook-weight: "10" - labels: - {{- include "edt-service.labels" . | nindent 4 }} -spec: - ttlSecondsAfterFinished: 30 - template: - spec: - containers: - - name: migrations - image: {{ .Values.global.image.registry }}/{{ .Values.image.repository }}:{{ .Values.global.image.tag | default .Chart.AppVersion }} - imagePullPolicy: Always - command: ['./efbundle', '--verbose','--connection', '$(ConnectionStrings__EdtDataStore)'] - env: - - name: DB_HOST - value: jum-database - - name: DB_PASSWORD - valueFrom: - secretKeyRef: - name: jum-database - key: DB_PASSWORD - - name: DB_USER - valueFrom: - secretKeyRef: - name: jum-database - key: DB_USER - - name: DATABASE_NAME - value: jum - - name: DOTNET_BUNDLE_EXTRACT_BASE_DIR - value: /tmp - - name: ConnectionStrings__EdtDataStore - valueFrom: - configMapKeyRef: - name: jum-api-database - key: CONNECTION_STRINGS_JUM - restartPolicy: Never - backoffLimit: 3 -{{- end }} - diff --git a/charts/edt-service/templates/secrets.yaml b/charts/edt-service/templates/secrets.yaml deleted file mode 100644 index ec7fd95e..00000000 --- a/charts/edt-service/templates/secrets.yaml +++ /dev/null @@ -1,17 +0,0 @@ -apiVersion: v1 -kind: Secret -metadata: - name: {{ include "edt-service.fullname" . }}-jum-database -type: Opaque -data: - # retrieve the secret data using lookup function and when not exists, return an empty dictionary / map as result - {{- $secretObj := (lookup "v1" "Secret" .Release.Namespace "jum-database") | default dict }} - {{- $secretUser := (get $secretObj "DB_USER") | default dict }} - {{- $secretPassword := (get $secretObj "DB_PASSWORD") | default dict}} - - # set $jwtSecret to existing secret data or generate a random one when not exists - {{- $userSecret := (get $secretPassword "DB_PASSWORD") | default (randAlphaNum 32 | b64enc) }} - {{- $passwordSecret := (get $secretPassword "DB_USER") | default (randAlphaNum 16 | b64enc) }} - - DB_PASSWORD: {{ $passwordSecret | quote }} - DB_USER: {{ $userSecret | quote }} \ No newline at end of file diff --git a/charts/edt-service/templates/service.yaml b/charts/edt-service/templates/service.yaml deleted file mode 100644 index 88d78976..00000000 --- a/charts/edt-service/templates/service.yaml +++ /dev/null @@ -1,15 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - name: {{ include "edt-service.fullname" . }} - labels: - {{- include "edt-service.labels" . | nindent 4 }} -spec: - type: {{ .Values.service.type }} - ports: - - port: {{ .Values.service.port }} - targetPort: http - protocol: TCP - name: http - selector: - {{- include "edt-service.selectorLabels" . | nindent 4 }} diff --git a/charts/edt-service/templates/serviceaccount.yaml b/charts/edt-service/templates/serviceaccount.yaml deleted file mode 100644 index a8722073..00000000 --- a/charts/edt-service/templates/serviceaccount.yaml +++ /dev/null @@ -1,12 +0,0 @@ -{{- if .Values.serviceAccount.create -}} -apiVersion: v1 -kind: ServiceAccount -metadata: - name: {{ include "edt-service.serviceAccountName" . }} - labels: - {{- include "edt-service.labels" . | nindent 4 }} - {{- with .Values.serviceAccount.annotations }} - annotations: - {{- toYaml . | nindent 4 }} - {{- end }} -{{- end }} diff --git a/charts/edt-service/templates/tests/test-connection.yaml b/charts/edt-service/templates/tests/test-connection.yaml deleted file mode 100644 index 41dd6759..00000000 --- a/charts/edt-service/templates/tests/test-connection.yaml +++ /dev/null @@ -1,15 +0,0 @@ -apiVersion: v1 -kind: Pod -metadata: - name: "{{ include "edt-service.fullname" . }}-test-connection" - labels: - {{- include "edt-service.labels" . | nindent 4 }} - annotations: - "helm.sh/hook": test -spec: - containers: - - name: wget - image: busybox - command: ['wget'] - args: ['{{ include "edt-service.fullname" . }}:{{ .Values.service.port }}'] - restartPolicy: Never diff --git a/charts/edt-service/values.yaml b/charts/edt-service/values.yaml deleted file mode 100644 index 93af4fee..00000000 --- a/charts/edt-service/values.yaml +++ /dev/null @@ -1,101 +0,0 @@ -# Default values for webapi. -# This is a YAML-formatted file. -# Declare variables to be passed into your templates. - -global: - vanityURL: "edt-service-e27db1-dev.apps.gold.devops.gov.bc.ca" - commit_sha: "" - licenseplate: "e27db1" - environment: "test" - image: - registry: image-registry.openshift-image-registry.svc:5000/e27db1-tools - tag: latest - -replicaCount: 1 -aspnetcore: - environment: Staging - -image: - repository: edt-service - pullPolicy: Always - - -imagePullSecrets: [] -nameOverride: "" -fullnameOverride: "" - -trustStoreCertificateSecretName: "kafka-client-truststore" - -database: - # .NET Core database connection string - dbConnectionString: 'host=postgresql;port=5432;database=pidpdb;username=postgres;password=postgres' - databaseHost: postgresql - # If secret exists, it should contain key "database_url". specify the name of the secret below. - # existingSecret: - -# Run migrations pre-install and pre-upgrade -migrations: - enabled: true - -serviceAccount: - # Specifies whether a service account should be created - create: false - # Annotations to add to the service account - annotations: {} - # The name of the service account to use. - # If not set and create is true, a name is generated using the fullname template - name: "" - -podAnnotations: {} - -podSecurityContext: {} - # fsGroup: 2000 - -securityContext: {} - # capabilities: - # drop: - # - ALL - # readOnlyRootFilesystem: true - # runAsNonRoot: true - # runAsUser: 1000 - -service: - type: ClusterIP - port: 8080 - -ingress: - enabled: false - className: "" - annotations: {} - # kubernetes.io/ingress.class: nginx - # kubernetes.io/tls-acme: "true" - hosts: - - host: edt-service-e27db1-dev.apps.gold.devops.gov.bc.ca - paths: - - path: / - pathType: ImplementationSpecific - tls: [] - # - secretName: chart-example-tls - # hosts: - # - chart-example.local - -resources: - limits: - cpu: 100m - memory: 128Mi - requests: - cpu: 75m - memory: 50Mi - -autoscaling: - enabled: false - minReplicas: 1 - maxReplicas: 100 - targetCPUUtilizationPercentage: 80 - # targetMemoryUtilizationPercentage: 80 - -nodeSelector: {} - -tolerations: [] - -affinity: {} diff --git a/charts/frontend/.helmignore b/charts/frontend/.helmignore deleted file mode 100644 index 0e8a0eb3..00000000 --- a/charts/frontend/.helmignore +++ /dev/null @@ -1,23 +0,0 @@ -# Patterns to ignore when building packages. -# This supports shell glob matching, relative path matching, and -# negation (prefixed with !). Only one pattern per line. -.DS_Store -# Common VCS dirs -.git/ -.gitignore -.bzr/ -.bzrignore -.hg/ -.hgignore -.svn/ -# Common backup files -*.swp -*.bak -*.tmp -*.orig -*~ -# Various IDEs -.project -.idea/ -*.tmproj -.vscode/ diff --git a/charts/frontend/Chart.yaml b/charts/frontend/Chart.yaml deleted file mode 100644 index 6e6ad164..00000000 --- a/charts/frontend/Chart.yaml +++ /dev/null @@ -1,24 +0,0 @@ -apiVersion: v2 -name: frontend -description: A Helm chart for Kubernetes - -# A chart can be either an 'application' or a 'library' chart. -# -# Application charts are a collection of templates that can be packaged into versioned archives -# to be deployed. -# -# Library charts provide useful utilities or functions for the chart developer. They're included as -# a dependency of application charts to inject those utilities and functions into the rendering -# pipeline. Library charts do not define any templates and therefore cannot be deployed. -type: application - -# This is the chart version. This version number should be incremented each time you make changes -# to the chart and its templates, including the app version. -# Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 0.1.5 - -# This is the version number of the application being deployed. This version number should be -# incremented each time you make changes to the application. Versions are not expected to -# follow Semantic Versioning. They should reflect the version the application is using. -# It is recommended to use it with quotes. -appVersion: "0.0.1" diff --git a/charts/frontend/templates/NOTES.txt b/charts/frontend/templates/NOTES.txt deleted file mode 100644 index 81b55833..00000000 --- a/charts/frontend/templates/NOTES.txt +++ /dev/null @@ -1,22 +0,0 @@ -1. Get the application URL by running these commands: -{{- if .Values.ingress.enabled }} -{{- range $host := .Values.ingress.hosts }} - {{- range .paths }} - http{{ if $.Values.ingress.tls }}s{{ end }}://{{ $host.host }}{{ .path }} - {{- end }} -{{- end }} -{{- else if contains "NodePort" .Values.service.type }} - export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "frontend.fullname" . }}) - export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}") - echo http://$NODE_IP:$NODE_PORT -{{- else if contains "LoadBalancer" .Values.service.type }} - NOTE: It may take a few minutes for the LoadBalancer IP to be available. - You can watch the status of by running 'kubectl get --namespace {{ .Release.Namespace }} svc -w {{ include "frontend.fullname" . }}' - export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "frontend.fullname" . }} --template "{{"{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}") - echo http://$SERVICE_IP:{{ .Values.service.port }} -{{- else if contains "ClusterIP" .Values.service.type }} - export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name={{ include "frontend.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") - export CONTAINER_PORT=$(kubectl get pod --namespace {{ .Release.Namespace }} $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}") - echo "Visit http://127.0.0.1:8080 to use your application" - kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME 8080:$CONTAINER_PORT -{{- end }} diff --git a/charts/frontend/templates/_helpers.tpl b/charts/frontend/templates/_helpers.tpl deleted file mode 100644 index 92c6c3b2..00000000 --- a/charts/frontend/templates/_helpers.tpl +++ /dev/null @@ -1,62 +0,0 @@ -{{/* -Expand the name of the chart. -*/}} -{{- define "frontend.name" -}} -{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }} -{{- end }} - -{{/* -Create a default fully qualified app name. -We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). -If release name contains chart name it will be used as a full name. -*/}} -{{- define "frontend.fullname" -}} -{{- if .Values.fullnameOverride }} -{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }} -{{- else }} -{{- $name := default .Chart.Name .Values.nameOverride }} -{{- if contains $name .Release.Name }} -{{- .Release.Name | trunc 63 | trimSuffix "-" }} -{{- else }} -{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }} -{{- end }} -{{- end }} -{{- end }} - -{{/* -Create chart name and version as used by the chart label. -*/}} -{{- define "frontend.chart" -}} -{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} -{{- end }} - -{{/* -Common labels -*/}} -{{- define "frontend.labels" -}} -helm.sh/chart: {{ include "frontend.chart" . }} -{{ include "frontend.selectorLabels" . }} -{{- if .Chart.AppVersion }} -app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} -{{- end }} -app.kubernetes.io/managed-by: {{ .Release.Service }} -{{- end }} - -{{/* -Selector labels -*/}} -{{- define "frontend.selectorLabels" -}} -app.kubernetes.io/name: {{ include "frontend.name" . }} -app.kubernetes.io/instance: {{ .Release.Name }} -{{- end }} - -{{/* -Create the name of the service account to use -*/}} -{{- define "frontend.serviceAccountName" -}} -{{- if .Values.serviceAccount.create }} -{{- default (include "frontend.fullname" .) .Values.serviceAccount.name }} -{{- else }} -{{- default "default" .Values.serviceAccount.name }} -{{- end }} -{{- end }} diff --git a/charts/frontend/templates/config-map.yaml b/charts/frontend/templates/config-map.yaml deleted file mode 100644 index eb7e8c7e..00000000 --- a/charts/frontend/templates/config-map.yaml +++ /dev/null @@ -1,52 +0,0 @@ -{{- $separator := ternary "-" "." (regexMatch "(?:\\..*?){4}" .Values.global.vanityURL) -}} -{{- $domain := .Values.global.vanityURL -}} -{{- $fullName := include "frontend.fullname" . -}} -{{ $release := .Release.Name }} -{{ $ocEnv := regexFind "([^-]*$)" .Release.Namespace }} -{{ $isPR := hasPrefix "pr-" .Release.Name }} -## Derived release name -{{ $drn := ternary $release $ocEnv $isPR }} -{{ $isProd := contains "prod" $ocEnv }} -# -kind: ConfigMap -apiVersion: v1 -metadata: - name: {{ include "frontend.fullname" . }} - labels: - {{- include "frontend.labels" . | nindent 4 }} -data: - environment.json: |- - { - "environmentName": "{{ .Values.settings.environmentName }}", - "apiEndpoint": "https://{{ .Values.global.vanityURL }}/api/v1", - "configEndpoint": "https://{{ .Values.global.vanityURL }}", - "applicationUrl": "https://{{ .Values.global.vanityURL }}", - "caseManagement": { - "showAUFLink": true, - "showCaseImportLink": false, - "stickyAgencyCodes": [ "RCMP","FAKE"] - }, - "urls": { - "subAgencyAufPortalUrl": "{{ .Values.settings.launch.subAgencyAufPortalUrl }}", - "bcpsDemsPortalUrl": "{{ .Values.settings.launch.bcpsDemsPortalUrl }}", - "bcLawDiscPortalUrl": "{{ .Values.settings.launch.bcLawDiscPortalUrl }}", - "publicDiscPortalUrl": "{{ .Values.settings.launch.publicDiscPortalUrl }}" - }, - "launch": { - "bcLawDiscPortalLabel": "{{ .Values.settings.launch.bcLawDiscPortalLabel }}", - "subAgencyAufPortalLabel": "{{ .Values.settings.launch.subAgencyAufPortalLabel }}", - "bcpsDemsPortalLabel" : "{{ .Values.settings.launch.bcpsDemsPortalLabel }}", - "outOfCustodyPortalLabel" : "{{ .Values.settings.launch.outOfCustodyPortalLabel }}" - }, - "demsImportURL": "{{ .Values.settings.edtURL }}", - "keycloakConfig": { - "config": { - "url": "{{ .Values.settings.keycloak.url }}", - "realm": "{{ .Values.settings.keycloak.realm }}", - "clientId": "{{ .Values.settings.keycloak.clientId }}" - }, - "initOptions": { - "onLoad": "check-sso" - } - } - } diff --git a/charts/frontend/templates/deployment.yaml b/charts/frontend/templates/deployment.yaml deleted file mode 100644 index 5e89f3dc..00000000 --- a/charts/frontend/templates/deployment.yaml +++ /dev/null @@ -1,85 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - name: {{ include "frontend.fullname" . }} - labels: - {{- include "frontend.labels" . | nindent 4 }} -spec: - {{- if not .Values.autoscaling.enabled }} - replicas: {{ .Values.replicaCount }} - {{- end }} - selector: - matchLabels: - {{- include "frontend.selectorLabels" . | nindent 6 }} - template: - metadata: - annotations: - checksum/config: {{ include (print $.Template.BasePath "/config-map.yaml") . | sha256sum }} - {{- if .Values.global.commit_sha }} - commit_sha: {{ quote .Values.global.commit_sha }} - {{- end}} - {{- with .Values.podAnnotations }} - {{- toYaml . | nindent 8 }} - {{- end }} - labels: - {{- include "frontend.selectorLabels" . | nindent 8 }} - spec: - {{- with .Values.imagePullSecrets }} - imagePullSecrets: - {{- toYaml . | nindent 8 }} - {{- end }} - serviceAccountName: {{ include "frontend.serviceAccountName" . }} - securityContext: - {{- toYaml .Values.podSecurityContext | nindent 8 }} - volumes: - - name: frontend-config - configMap: - name: {{ include "frontend.fullname" . }} - containers: - - name: {{ .Chart.Name }} - securityContext: - {{- toYaml .Values.securityContext | nindent 12 }} - image: "{{ .Values.global.image.registry }}/{{ .Values.image.repository }}:{{ .Values.global.image.tag | default .Chart.AppVersion }}" - imagePullPolicy: {{ .Values.image.pullPolicy }} - ports: - - name: http - containerPort: 8080 - protocol: TCP - livenessProbe: - httpGet: - path: / - port: http - readinessProbe: - httpGet: - path: / - port: http - resources: - {{- toYaml .Values.resources | nindent 12 }} - volumeMounts: - - name: frontend-config - subPath: environment.json - mountPath: /app/assets/environment.json - {{- with .Values.nodeSelector }} - nodeSelector: - {{- toYaml . | nindent 8 }} - {{- end }} - affinity: - podAntiAffinity: - preferredDuringSchedulingIgnoredDuringExecution: - - weight: 1 - podAffinityTerm: - topologyKey: kubernetes.io/hostname - labelSelector: - matchExpressions: - - key: app.kubernetes.io/name - operator: In - values: - - {{ include "frontend.name" . }} - - key: app.kubernetes.io/instance - operator: In - values: - - {{ .Release.Name }} - {{- with .Values.tolerations }} - tolerations: - {{- toYaml . | nindent 8 }} - {{- end }} diff --git a/charts/frontend/templates/hpa.yaml b/charts/frontend/templates/hpa.yaml deleted file mode 100644 index f1ffdc14..00000000 --- a/charts/frontend/templates/hpa.yaml +++ /dev/null @@ -1,28 +0,0 @@ -{{- if .Values.autoscaling.enabled }} -apiVersion: autoscaling/v2beta1 -kind: HorizontalPodAutoscaler -metadata: - name: {{ include "frontend.fullname" . }} - labels: - {{- include "frontend.labels" . | nindent 4 }} -spec: - scaleTargetRef: - apiVersion: apps/v1 - kind: Deployment - name: {{ include "frontend.fullname" . }} - minReplicas: {{ .Values.autoscaling.minReplicas }} - maxReplicas: {{ .Values.autoscaling.maxReplicas }} - metrics: - {{- if .Values.autoscaling.targetCPUUtilizationPercentage }} - - type: Resource - resource: - name: cpu - targetAverageUtilization: {{ .Values.autoscaling.targetCPUUtilizationPercentage }} - {{- end }} - {{- if .Values.autoscaling.targetMemoryUtilizationPercentage }} - - type: Resource - resource: - name: memory - targetAverageUtilization: {{ .Values.autoscaling.targetMemoryUtilizationPercentage }} - {{- end }} -{{- end }} diff --git a/charts/frontend/templates/ingress.yaml b/charts/frontend/templates/ingress.yaml deleted file mode 100644 index 410043aa..00000000 --- a/charts/frontend/templates/ingress.yaml +++ /dev/null @@ -1,61 +0,0 @@ -{{- if .Values.ingress.enabled -}} -{{- $fullName := include "frontend.fullname" . -}} -{{- $svcPort := .Values.service.port -}} -{{- if and .Values.ingress.className (not (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion)) }} - {{- if not (hasKey .Values.ingress.annotations "kubernetes.io/ingress.class") }} - {{- $_ := set .Values.ingress.annotations "kubernetes.io/ingress.class" .Values.ingress.className}} - {{- end }} -{{- end }} -{{- if semverCompare ">=1.19-0" .Capabilities.KubeVersion.GitVersion -}} -apiVersion: networking.k8s.io/v1 -{{- else if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion -}} -apiVersion: networking.k8s.io/v1beta1 -{{- else -}} -apiVersion: extensions/v1beta1 -{{- end }} -kind: Ingress -metadata: - name: {{ $fullName }} - labels: - {{- include "frontend.labels" . | nindent 4 }} - {{- with .Values.ingress.annotations }} - annotations: - {{- toYaml . | nindent 4 }} - {{- end }} -spec: - {{- if and .Values.ingress.className (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion) }} - ingressClassName: {{ .Values.ingress.className }} - {{- end }} - {{- if .Values.ingress.tls }} - tls: - {{- range .Values.ingress.tls }} - - hosts: - {{- range .hosts }} - - {{ . | quote }} - {{- end }} - secretName: {{ .secretName }} - {{- end }} - {{- end }} - rules: - {{- range .Values.ingress.hosts }} - - host: {{ .host | quote }} - http: - paths: - {{- range .paths }} - - path: {{ .path }} - {{- if and .pathType (semverCompare ">=1.18-0" $.Capabilities.KubeVersion.GitVersion) }} - pathType: {{ .pathType }} - {{- end }} - backend: - {{- if semverCompare ">=1.19-0" $.Capabilities.KubeVersion.GitVersion }} - service: - name: {{ $fullName }} - port: - number: {{ $svcPort }} - {{- else }} - serviceName: {{ $fullName }} - servicePort: {{ $svcPort }} - {{- end }} - {{- end }} - {{- end }} -{{- end }} diff --git a/charts/frontend/templates/service.yaml b/charts/frontend/templates/service.yaml deleted file mode 100644 index 708b0eda..00000000 --- a/charts/frontend/templates/service.yaml +++ /dev/null @@ -1,15 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - name: {{ include "frontend.fullname" . }} - labels: - {{- include "frontend.labels" . | nindent 4 }} -spec: - type: {{ .Values.service.type }} - ports: - - port: {{ .Values.service.port }} - targetPort: http - protocol: TCP - name: http - selector: - {{- include "frontend.selectorLabels" . | nindent 4 }} diff --git a/charts/frontend/templates/serviceaccount.yaml b/charts/frontend/templates/serviceaccount.yaml deleted file mode 100644 index cc649091..00000000 --- a/charts/frontend/templates/serviceaccount.yaml +++ /dev/null @@ -1,12 +0,0 @@ -{{- if .Values.serviceAccount.create -}} -apiVersion: v1 -kind: ServiceAccount -metadata: - name: {{ include "frontend.serviceAccountName" . }} - labels: - {{- include "frontend.labels" . | nindent 4 }} - {{- with .Values.serviceAccount.annotations }} - annotations: - {{- toYaml . | nindent 4 }} - {{- end }} -{{- end }} diff --git a/charts/frontend/templates/tests/test-connection.yaml b/charts/frontend/templates/tests/test-connection.yaml deleted file mode 100644 index 372ac5eb..00000000 --- a/charts/frontend/templates/tests/test-connection.yaml +++ /dev/null @@ -1,15 +0,0 @@ -apiVersion: v1 -kind: Pod -metadata: - name: "{{ include "frontend.fullname" . }}-test-connection" - labels: - {{- include "frontend.labels" . | nindent 4 }} - annotations: - "helm.sh/hook": test -spec: - containers: - - name: wget - image: busybox - command: ['wget'] - args: ['{{ include "frontend.fullname" . }}:{{ .Values.service.port }}'] - restartPolicy: Never diff --git a/charts/frontend/values.yaml b/charts/frontend/values.yaml deleted file mode 100644 index c81505fe..00000000 --- a/charts/frontend/values.yaml +++ /dev/null @@ -1,93 +0,0 @@ -# Default values for frontend. -# This is a YAML-formatted file. -# Declare variables to be passed into your templates. - -global: - vanityURL: "" - commit_sha: "" - image: - registry: image-registry.openshift-image-registry.svc:5000/e27db1-tools - tag: latest - -replicaCount: 1 - -image: - repository: pidp-frontend - pullPolicy: Always - # Overrides the image tag whose default is the chart appVersion. - tag: "latest" - -imagePullSecrets: [] -nameOverride: "" -fullnameOverride: "" - -settings: - environmentName: dev - edtURL: https://dems.dev.jag.gov.bc.ca - keycloak: - url: https://sso-dev-5b7aa5-dev.apps.silver.devops.gov.bc.ca/auth - realm: "DEMSPOC" - clientId: "PIDP-WEBAPP" - -serviceAccount: - # Specifies whether a service account should be created - create: false - # Annotations to add to the service account - annotations: {} - # The name of the service account to use. - # If not set and create is true, a name is generated using the fullname template - name: "" - -podAnnotations: {} - -podSecurityContext: {} - # fsGroup: 2000 - -securityContext: {} - # capabilities: - # drop: - # - ALL - # readOnlyRootFilesystem: true - # runAsNonRoot: true - # runAsUser: 1000 - -service: - type: ClusterIP - port: 8080 - -ingress: - enabled: false - className: "" - annotations: {} - # kubernetes.io/ingress.class: nginx - # kubernetes.io/tls-acme: "true" - hosts: - - host: pidp-frontend-e27db1-dev.apps.silver.devops.gov.bc.ca - paths: - - path: / - pathType: ImplementationSpecific - tls: [] - # - secretName: chart-example-tls - # hosts: - # - chart-example.local - -resources: - limits: - cpu: 25m - memory: 56Mi - requests: - cpu: 10m - memory: 5Mi - -autoscaling: - enabled: false - minReplicas: 1 - maxReplicas: 10 - targetCPUUtilizationPercentage: 80 - # targetMemoryUtilizationPercentage: 80 - -nodeSelector: {} - -tolerations: [] - -affinity: {} diff --git a/charts/jum-backend/.helmignore b/charts/jum-backend/.helmignore deleted file mode 100644 index 0e8a0eb3..00000000 --- a/charts/jum-backend/.helmignore +++ /dev/null @@ -1,23 +0,0 @@ -# Patterns to ignore when building packages. -# This supports shell glob matching, relative path matching, and -# negation (prefixed with !). Only one pattern per line. -.DS_Store -# Common VCS dirs -.git/ -.gitignore -.bzr/ -.bzrignore -.hg/ -.hgignore -.svn/ -# Common backup files -*.swp -*.bak -*.tmp -*.orig -*~ -# Various IDEs -.project -.idea/ -*.tmproj -.vscode/ diff --git a/charts/jum-backend/Chart.yaml b/charts/jum-backend/Chart.yaml deleted file mode 100644 index 557a3ea2..00000000 --- a/charts/jum-backend/Chart.yaml +++ /dev/null @@ -1,24 +0,0 @@ -apiVersion: v2 -name: jum-backend -description: A Helm chart for Kubernetes - -# A chart can be either an 'application' or a 'library' chart. -# -# Application charts are a collection of templates that can be packaged into versioned archives -# to be deployed. -# -# Library charts provide useful utilities or functions for the chart developer. They're included as -# a dependency of application charts to inject those utilities and functions into the rendering -# pipeline. Library charts do not define any templates and therefore cannot be deployed. -type: application - -# This is the chart version. This version number should be incremented each time you make changes -# to the chart and its templates, including the app version. -# Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 0.2.0 - -# This is the version number of the application being deployed. This version number should be -# incremented each time you make changes to the application. Versions are not expected to -# follow Semantic Versioning. They should reflect the version the application is using. -# It is recommended to use it with quotes. -appVersion: "1.16.0" diff --git a/charts/jum-backend/templates/NOTES.txt b/charts/jum-backend/templates/NOTES.txt deleted file mode 100644 index 2d645317..00000000 --- a/charts/jum-backend/templates/NOTES.txt +++ /dev/null @@ -1,22 +0,0 @@ -1. Get the application URL by running these commands: -{{- if .Values.ingress.enabled }} -{{- range $host := .Values.ingress.hosts }} - {{- range .paths }} - http{{ if $.Values.ingress.tls }}s{{ end }}://{{ $host.host }}{{ .path }} - {{- end }} -{{- end }} -{{- else if contains "NodePort" .Values.service.type }} - export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "backend.fullname" . }}) - export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}") - echo http://$NODE_IP:$NODE_PORT -{{- else if contains "LoadBalancer" .Values.service.type }} - NOTE: It may take a few minutes for the LoadBalancer IP to be available. - You can watch the status of by running 'kubectl get --namespace {{ .Release.Namespace }} svc -w {{ include "backend.fullname" . }}' - export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "backend.fullname" . }} --template "{{"{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}") - echo http://$SERVICE_IP:{{ .Values.service.port }} -{{- else if contains "ClusterIP" .Values.service.type }} - export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name={{ include "backend.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") - export CONTAINER_PORT=$(kubectl get pod --namespace {{ .Release.Namespace }} $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}") - echo "Visit http://127.0.0.1:8080 to use your application" - kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME 8080:$CONTAINER_PORT -{{- end }} diff --git a/charts/jum-backend/templates/_helpers.tpl b/charts/jum-backend/templates/_helpers.tpl deleted file mode 100644 index 1a95fc4b..00000000 --- a/charts/jum-backend/templates/_helpers.tpl +++ /dev/null @@ -1,53 +0,0 @@ -{{/* -Expand the name of the chart. -*/}} -{{- define "backend.name" -}} -{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }} -{{- end }} - -{{/* -Create a default fully qualified app name. -We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). -If release name contains chart name it will be used as a full name. -*/}} -{{- define "backend.fullname" -}} -{{- if .Values.fullnameOverride }} -{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }} -{{- else }} -{{- $name := default .Chart.Name .Values.nameOverride }} -{{- if contains $name .Release.Name }} -{{- .Release.Name | trunc 63 | trimSuffix "-" }} -{{- else }} -{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }} -{{- end }} -{{- end }} -{{- end }} - -{{/* -Create chart name and version as used by the chart label. -*/}} -{{- define "backend.chart" -}} -{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} -{{- end }} - -{{/* -Common labels -*/}} -{{- define "backend.labels" -}} -helm.sh/chart: {{ include "backend.chart" . }} -{{ include "backend.selectorLabels" . }} -{{- if .Chart.AppVersion }} -app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} -{{- end }} -app.kubernetes.io/managed-by: {{ .Release.Service }} -{{- end }} - -{{/* -Selector labels -*/}} -{{- define "backend.selectorLabels" -}} -app.kubernetes.io/name: {{ include "backend.name" . }} -app.kubernetes.io/instance: {{ .Release.Name }} -{{- end }} - - diff --git a/charts/jum-backend/templates/deployment.yaml b/charts/jum-backend/templates/deployment.yaml deleted file mode 100644 index ee03a510..00000000 --- a/charts/jum-backend/templates/deployment.yaml +++ /dev/null @@ -1,131 +0,0 @@ -{{ $release := .Release.Name }} -{{ $ocEnv := regexFind "([^-]*$)" .Release.Namespace }} -{{ $domain := .Values.global.vanityURL }} -{{ $isPR := hasPrefix "pr-" .Release.Name }} -## Derived release name -{{ $drn := ternary $release $ocEnv $isPR }} -{{ $isProd := contains "prod" $ocEnv }} -# -apiVersion: apps/v1 -kind: Deployment -metadata: - name: {{ include "backend.fullname" . }} - labels: - {{- include "backend.labels" . | nindent 4 }} -spec: - {{- if not .Values.autoscaling.enabled }} - replicas: {{ .Values.replicaCount }} - {{- end }} - selector: - matchLabels: - {{- include "backend.selectorLabels" . | nindent 6 }} - template: - metadata: - annotations: - vault.hashicorp.com/agent-inject: 'true' - vault.hashicorp.com/agent-pre-populate-only: 'true' - vault.hashicorp.com/auth-path: auth/k8s-gold - vault.hashicorp.com/namespace: platform-services - vault.hashicorp.com/agent-requests-cpu: 5m - vault.hashicorp.com/agent-limits-cpu: 10m - vault.hashicorp.com/agent-requests-mem: 20Mi - vault.hashicorp.com/role: {{ .Values.global.vault.role }} # licenseplate-nonprod or licenseplate-prod are your options - vault.hashicorp.com/agent-inject-secret-DIAM-common: {{ .Values.global.vault.role }}/{{ .Values.global.vault.path }}DIAM-common - vault.hashicorp.com/agent-inject-template-DIAM-common: | - {{`{{- with secret `}}"{{ .Values.global.vault.role }}/{{ .Values.global.vault.path }}DIAM-common"{{` }} - {{- range $k, $v := .Data.data }} - {{ $k }}="{{ $v }}"{{ end -}} - {{- end `}} }} - vault.hashicorp.com/agent-inject-secret-DIAM-jum: {{ .Values.global.vault.role }}/{{ .Values.global.vault.path }}DIAM-jum - vault.hashicorp.com/agent-inject-template-DIAM-jum: | - {{`{{- with secret `}}"{{ .Values.global.vault.role }}/{{ .Values.global.vault.path }}DIAM-jum"{{` }} - {{- range $k, $v := .Data.data }} - {{ $k }}="{{ $v }}"{{ end -}} - {{- end `}} }} - vault.hashicorp.com/agent-inject-secret-DIAM-keycloak: {{ .Values.global.vault.role }}/{{ .Values.global.vault.path }}DIAM-keycloak - vault.hashicorp.com/agent-inject-template-DIAM-keycloak: | - {{`{{- with secret `}}"{{ .Values.global.vault.role }}/{{ .Values.global.vault.path }}DIAM-keycloak"{{` }} - {{- range $k, $v := .Data.data }} - {{ $k }}="{{ $v }}"{{ end -}} - {{- end `}} }} - {{- if .Values.global.commit_sha }} - commit_sha: {{ .Values.global.commit_sha }} - {{- end}} - {{- with .Values.podAnnotations }} - {{- toYaml . | nindent 8 }} - {{- end }} - labels: - {{- include "backend.selectorLabels" . | nindent 8 }} - spec: - {{- with .Values.imagePullSecrets }} - imagePullSecrets: - {{- toYaml . | nindent 8 }} - {{- end }} - serviceAccountName: {{ .Values.global.licenseplate }}-vault - securityContext: - {{- toYaml .Values.podSecurityContext | nindent 8 }} - containers: - - name: {{ .Chart.Name }} - securityContext: - {{- toYaml .Values.securityContext | nindent 12 }} - image: {{ .Values.global.image.registry }}/{{ .Values.image.repository }}:{{ .Values.global.image.tag | default .Chart.AppVersion }} - imagePullPolicy: {{ .Values.image.pullPolicy }} - env: - - name: ApplicationUrl - value: "https://{{ if $isProd }}{{else}}{{ $release }}.{{end}}{{ $domain }}" - volumeMounts: - - name: kafka-truststore - mountPath: "/opt/kafka/certificates" - readOnly: true - envFrom: - - secretRef: - name: ches - - configMapRef: - name: mail-settings - ports: - - name: http - containerPort: 8080 - protocol: TCP - livenessProbe: - httpGet: - path: /health/liveness - port: http - scheme: HTTP - timeoutSeconds: 10 - periodSeconds: 30 - successThreshold: 1 - failureThreshold: 5 - # startupProbe: - # httpGet: - # path: /health/liveness - # port: http - # scheme: HTTP - # timeoutSeconds: 1 - # periodSeconds: 10 - # successThreshold: 1 - # failureThreshold: 30 - # readinessProbe: - # httpGet: - # path: / - # port: http - resources: - {{- toYaml .Values.resources | nindent 12 }} - {{- with .Values.nodeSelector }} - nodeSelector: - {{- toYaml . | nindent 8 }} - {{- end }} - {{- with .Values.affinity }} - affinity: - {{- toYaml . | nindent 8 }} - {{- end }} - {{- with .Values.tolerations }} - tolerations: - {{- toYaml . | nindent 8 }} - {{- end }} - volumes: - - name: kafka-truststore - secret: - secretName: kafka-cluster-client-truststore - - name: truststore-key - secret: - secretName: kafka-cluster-client-key \ No newline at end of file diff --git a/charts/jum-backend/templates/hpa.yaml b/charts/jum-backend/templates/hpa.yaml deleted file mode 100644 index fe4dba97..00000000 --- a/charts/jum-backend/templates/hpa.yaml +++ /dev/null @@ -1,28 +0,0 @@ -{{- if .Values.autoscaling.enabled }} -apiVersion: autoscaling/v2beta1 -kind: HorizontalPodAutoscaler -metadata: - name: {{ include "backend.fullname" . }} - labels: - {{- include "backend.labels" . | nindent 4 }} -spec: - scaleTargetRef: - apiVersion: apps/v1 - kind: Deployment - name: {{ include "backend.fullname" . }} - minReplicas: {{ .Values.autoscaling.minReplicas }} - maxReplicas: {{ .Values.autoscaling.maxReplicas }} - metrics: - {{- if .Values.autoscaling.targetCPUUtilizationPercentage }} - - type: Resource - resource: - name: cpu - targetAverageUtilization: {{ .Values.autoscaling.targetCPUUtilizationPercentage }} - {{- end }} - {{- if .Values.autoscaling.targetMemoryUtilizationPercentage }} - - type: Resource - resource: - name: memory - targetAverageUtilization: {{ .Values.autoscaling.targetMemoryUtilizationPercentage }} - {{- end }} -{{- end }} diff --git a/charts/jum-backend/templates/ingress.yaml b/charts/jum-backend/templates/ingress.yaml deleted file mode 100644 index c2a08c2c..00000000 --- a/charts/jum-backend/templates/ingress.yaml +++ /dev/null @@ -1,61 +0,0 @@ -{{- if .Values.ingress.enabled -}} -{{- $fullName := include "backend.fullname" . -}} -{{- $svcPort := .Values.service.port -}} -{{- if and .Values.ingress.className (not (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion)) }} - {{- if not (hasKey .Values.ingress.annotations "kubernetes.io/ingress.class") }} - {{- $_ := set .Values.ingress.annotations "kubernetes.io/ingress.class" .Values.ingress.className}} - {{- end }} -{{- end }} -{{- if semverCompare ">=1.19-0" .Capabilities.KubeVersion.GitVersion -}} -apiVersion: networking.k8s.io/v1 -{{- else if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion -}} -apiVersion: networking.k8s.io/v1beta1 -{{- else -}} -apiVersion: extensions/v1beta1 -{{- end }} -kind: Ingress -metadata: - name: {{ $fullName }} - labels: - {{- include "backend.labels" . | nindent 4 }} - {{- with .Values.ingress.annotations }} - annotations: - {{- toYaml . | nindent 4 }} - {{- end }} -spec: - {{- if and .Values.ingress.className (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion) }} - ingressClassName: {{ .Values.ingress.className }} - {{- end }} - {{- if .Values.ingress.tls }} - tls: - {{- range .Values.ingress.tls }} - - hosts: - {{- range .hosts }} - - {{ . | quote }} - {{- end }} - secretName: {{ .secretName }} - {{- end }} - {{- end }} - rules: - {{- range .Values.ingress.hosts }} - - host: {{ .host | quote }} - http: - paths: - {{- range .paths }} - - path: {{ .path }} - {{- if and .pathType (semverCompare ">=1.18-0" $.Capabilities.KubeVersion.GitVersion) }} - pathType: {{ .pathType }} - {{- end }} - backend: - {{- if semverCompare ">=1.19-0" $.Capabilities.KubeVersion.GitVersion }} - service: - name: {{ $fullName }} - port: - number: {{ $svcPort }} - {{- else }} - serviceName: {{ $fullName }} - servicePort: {{ $svcPort }} - {{- end }} - {{- end }} - {{- end }} -{{- end }} diff --git a/charts/jum-backend/templates/migrations.yaml b/charts/jum-backend/templates/migrations.yaml deleted file mode 100644 index 854b0bbe..00000000 --- a/charts/jum-backend/templates/migrations.yaml +++ /dev/null @@ -1,48 +0,0 @@ -{{- if .Values.migrations.enabled }} -{{ $release := .Release.Name }} -{{ $ocEnv := regexFind "([^-]*$)" .Release.Namespace }} -{{ $isPR := hasPrefix "pr-" .Release.Name }} -## Derived release name -{{ $drn := ternary $release $ocEnv $isPR }} -# -apiVersion: batch/v1 -kind: Job -metadata: - name: {{ include "backend.fullname" . }}-migrations - annotations: - helm.sh/hook: pre-install, pre-upgrade - helm.sh/hook-weight: "10" - labels: - {{- include "backend.labels" . | nindent 4 }} -spec: - ttlSecondsAfterFinished: 30 - template: - spec: - containers: - - name: migrations - image: {{ .Values.global.image.registry }}/{{ .Values.image.repository }}:{{ .Values.global.image.tag | default .Chart.AppVersion }} - imagePullPolicy: {{ .Values.image.pullPolicy }} - command: ['./efbundle', '--connection', '$(ConnectionStrings__jumDatabase)'] - env: - - name: DB_HOST - value: jum-database - - name: POSTGRESQL_PASSWORD - valueFrom: - secretKeyRef: - name: jum-db-jum-database-secret - key: sapassword - - name: POSTGRESQL_USER - value: sa - - name: POSTGRESQL_DATABASE - value: JumDB - - name: DOTNET_BUNDLE_EXTRACT_BASE_DIR - value: /tmp - - name: ConnectionStrings__jumDatabase - valueFrom: - configMapKeyRef: - name: jum-api-database - key: CONNECTION_STRINGS_JUM - restartPolicy: Never - backoffLimit: 3 -{{- end }} - diff --git a/charts/jum-backend/templates/route.yaml b/charts/jum-backend/templates/route.yaml deleted file mode 100644 index 354238fe..00000000 --- a/charts/jum-backend/templates/route.yaml +++ /dev/null @@ -1,19 +0,0 @@ -{{- if .Values.route.enabled -}} -kind: Route -apiVersion: route.openshift.io/v1 -metadata: - name: {{ include "backend.fullname" . }}-api - namespace: {{ .Values.global.licenseplate }}-{{ .Values.global.environment }} -spec: - host: {{ include "backend.fullname" . }}-{{ .Values.global.licenseplate }}-{{ .Values.global.environment }}.apps.gold.devops.gov.bc.ca - to: - kind: Service - name: {{ include "backend.fullname" . }} - weight: 100 - port: - targetPort: http - tls: - termination: edge - insecureEdgeTerminationPolicy: None - wildcardPolicy: None -{{- end }} diff --git a/charts/jum-backend/templates/secrets.yaml b/charts/jum-backend/templates/secrets.yaml deleted file mode 100644 index ec4dbc96..00000000 --- a/charts/jum-backend/templates/secrets.yaml +++ /dev/null @@ -1,9 +0,0 @@ -apiVersion: v1 -kind: Secret -metadata: - name: {{ include "backend.fullname" . }}-jum-api - labels: - {{- include "backend.labels" . | nindent 4 }} -type: Opaque -stringData: - url: http://{{ include "backend.fullname" . }}.{{ .Values.global.licenseplate }}-{{ .Values.global.environment }}.svc.cluster.local:8080/api \ No newline at end of file diff --git a/charts/jum-backend/templates/service.yaml b/charts/jum-backend/templates/service.yaml deleted file mode 100644 index 4fb41865..00000000 --- a/charts/jum-backend/templates/service.yaml +++ /dev/null @@ -1,15 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - name: {{ include "backend.fullname" . }} - labels: - {{- include "backend.labels" . | nindent 4 }} -spec: - type: {{ .Values.service.type }} - ports: - - port: {{ .Values.service.port }} - targetPort: http - protocol: TCP - name: http - selector: - {{- include "backend.selectorLabels" . | nindent 4 }} diff --git a/charts/jum-backend/templates/serviceaccount.yaml b/charts/jum-backend/templates/serviceaccount.yaml deleted file mode 100644 index a43e9425..00000000 --- a/charts/jum-backend/templates/serviceaccount.yaml +++ /dev/null @@ -1,12 +0,0 @@ -{{- if .Values.serviceAccount.create -}} -apiVersion: v1 -kind: ServiceAccount -metadata: - name: {{ include "backend.serviceAccountName" . }} - labels: - {{- include "backend.labels" . | nindent 4 }} - {{- with .Values.serviceAccount.annotations }} - annotations: - {{- toYaml . | nindent 4 }} - {{- end }} -{{- end }} diff --git a/charts/jum-backend/templates/tests/test-connection.yaml b/charts/jum-backend/templates/tests/test-connection.yaml deleted file mode 100644 index bdbe4ebd..00000000 --- a/charts/jum-backend/templates/tests/test-connection.yaml +++ /dev/null @@ -1,15 +0,0 @@ -apiVersion: v1 -kind: Pod -metadata: - name: "{{ include "backend.fullname" . }}-test-connection" - labels: - {{- include "backend.labels" . | nindent 4 }} - annotations: - "helm.sh/hook": test -spec: - containers: - - name: wget - image: busybox - command: ['wget'] - args: ['{{ include "backend.fullname" . }}:{{ .Values.service.port }}'] - restartPolicy: Never diff --git a/charts/jum-backend/values.yaml b/charts/jum-backend/values.yaml deleted file mode 100644 index f23d0fae..00000000 --- a/charts/jum-backend/values.yaml +++ /dev/null @@ -1,101 +0,0 @@ -# Default values for backend. -# This is a YAML-formatted file. -# Declare variables to be passed into your templates. - -global: - vanityURL: "jum-api-e27db1-dev.apps.gold.devops.gov.bc.ca" - commit_sha: "" - licenseplate: e27db1 - environment: dev - - image: - registry: image-registry.openshift-image-registry.svc:5000/e27db1-tools - tag: develop - -replicaCount: 1 - -# create a route? -route: - enabled: false - -image: - repository: jum-api - pullPolicy: Always - # Overrides the image tag whose default is the chart appVersion. - tag: "develop" - -imagePullSecrets: [] -nameOverride: "" -fullnameOverride: "" - - -# Run migrations pre-install and pre-upgrade -migrations: - enabled: false - -serviceAccount: - # Specifies whether a service account should be created - create: false - # Annotations to add to the service account - annotations: {} - # The name of the service account to use. - # If not set and create is true, a name is generated using the fullname template - name: "default" - -podAnnotations: {} - -podSecurityContext: {} - # fsGroup: 2000 - -securityContext: {} - # capabilities: - # drop: - # - ALL - # readOnlyRootFilesystem: true - # runAsNonRoot: true - # runAsUser: 1000 - -service: - type: ClusterIP - port: 8080 - -ingress: - enabled: false - className: "" - annotations: {} - # kubernetes.io/ingress.class: nginx - # kubernetes.io/tls-acme: "true" - hosts: - - host: jum-api-e27db1-dev.apps.gold.devops.gov.bc.ca - paths: - - path: / - pathType: ImplementationSpecific - tls: [] - # - secretName: chart-example-tls - # hosts: - # - chart-example.local - -resources: {} - # We usually recommend not to specify default resources and to leave this as a conscious - # choice for the user. This also increases chances charts run on environments with little - # resources, such as Minikube. If you do want to specify resources, uncomment the following - # lines, adjust them as necessary, and remove the curly braces after 'resources:'. - # limits: - # cpu: 100m - # memory: 128Mi - # requests: - # cpu: 100m - # memory: 128Mi - -autoscaling: - enabled: false - minReplicas: 1 - maxReplicas: 3 - targetCPUUtilizationPercentage: 80 - # targetMemoryUtilizationPercentage: 80 - -nodeSelector: {} - -tolerations: [] - -affinity: {} diff --git a/charts/jum-db/Chart.yaml b/charts/jum-db/Chart.yaml deleted file mode 100644 index 20d0a4bf..00000000 --- a/charts/jum-db/Chart.yaml +++ /dev/null @@ -1,12 +0,0 @@ -apiVersion: v2 -appVersion: 2019-CU16-ubuntu-20.04 -description: SQL Server 2019 Linux Helm Chart -home: https://hub.docker.com/_/microsoft-mssql-server -icon: https://img-prod-cms-rt-microsoft-com.akamaized.net/cms/api/am/imageFileData/RE1I4Dx -maintainers: -- email: info@simcube.co.uk - name: simcube -name: jum-database -sources: -- https://hub.docker.com/_/microsoft-mssql-server -version: 1.2.0 diff --git a/charts/jum-db/README.md b/charts/jum-db/README.md deleted file mode 100644 index df88a5b7..00000000 --- a/charts/jum-db/README.md +++ /dev/null @@ -1,226 +0,0 @@ -# HELM Chart for Microsoft SQL Server 2019 on Linux - -## Prerequisites - -* This chart requires Docker Engine 1.8+ in any of their supported platforms. Please see vendor requirements [here for more information](https://docs.microsoft.com/en-us/sql/linux/quickstart-install-connect-docker). -* At least 2GB of RAM (3.25 GB prior to 2017-CU2). Make sure to assign enough memory to the Docker VM if you're running on Docker for Mac or Windows. -* Requires the following variables - * You must change the acceptEula.value in the values.yaml file to `Y` or include `--set acceptEula.value=Y` in the command line of `helm install` to override the default value of `N`. - * You must change the editions variable in the values.yaml file to include the edition of SQL Server or include `--set edition.value=` in the command line of `helm install`. - - * You must change the acceptEula.value in the values.yaml file to `Y` or include `--set acceptEula.value=Y` in the command line of `helm install` to override the default value of `N`. -## Chart Components - -* Creates a SQL Server 2019 deployment (default edition: Express) -* Creates a Kubernetes Service on specified port (default: 1433) -* Creates a Secert to hold SA_PASSWORD - -## Installing the Chart - -You can install the chart with the release name `mymssql` as below. - -```console -$ helm install --name mymssql /mssql-linux --set acceptEula.value=Y --set edition.value=Developer -... -``` -$ helm install --name mymssql stable/mssql-linux --set acceptEula.value=Y --set edition.value=Developer - -> Note - If you do not specify a name, helm will select a name for you. - -### Installed Components - -You can use `kubectl get` to view all of the installed components. - -```console -$ kubectl get all -l app=mssql-linux -NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE -deploy/mymssql-mssql-linux 1 1 1 1 9m - -NAME DESIRED CURRENT READY AGE -rs/mymssql-mssql-linux-8688756468 1 1 1 9m - -NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE -deploy/mymssql-mssql-linux 1 1 1 1 9m - -NAME DESIRED CURRENT READY AGE -rs/mymssql-mssql-linux-8688756468 1 1 1 9m - -NAME READY STATUS RESTARTS AGE -po/mymssql-mssql-linux-8688756468-x758g 1/1 Running 0 9m - -NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE -svc/mymssql-mssql-linux ClusterIP 10.104.152.61 1433/TCP 9m - -``` - -### SA Password Retrieval - -The sa password is a randomized in the secret.yaml file. To retrieve the password, perform the following steps once you install the helm chart. - -```console -$ printf $(kubectl get secret --namespace default mymssql-mssql-linux-secret -o jsonpath="{.data.sapassword}" | base64 --decode);echo -... -``` - -## Connecting to SQL Server Instance - -1. Run the following command - -This command will create a pod called `mssqlcli` that will include the SQL Server Commandline `sqlcmd` and start at a bash prompt. - -```console -$ kubectl run mssqlcli --image=mcr.microsoft.com/mssql-tools -ti --restart=Never --rm=true -- /bin/bash -$ sqlcmd -S mymssql-mssql-linux -U sa -Password: -$ 1> select @@VERSION; -$ 2> go ------------------------------------------------------------------------------------- -Microsoft SQL Server 2019 -Dec 22 2017 16:13:22 -Copyright (C) 2017 Microsoft Corporation -Express Edition (64-bit) on Linux (Ubuntu 16.04.3 LTS) -(1 rows affected) - -``` - -## Values - -The configuration parameters in this section control the resources requested and utilized by the SQL Server instance. - -| Parameter | Description | Default | -| ---------------- | ---------------------------------------------------------------------------------------------- | -------------------------------- | -| acceptEula.value | EULA that needs to be accepted. It will need to be changed via commandline or values.yaml. | `n` | -| edition.value | The edition of SQL Server to install. See section [Editions](#sql-server-for-linux-editions). | `Developer` | -| sapassword | Password for sa login | `Random (20-AlphNum)`1 | -| image.repository | The docker hub repo for SQL Server | `mcr.microsoft.com/mssql/server` | -| image.tag | The tag for the image | `2017-CU5` | -| image.pullPolicy | The pull policy for the deployment | `IfNotPresent` | -| image.pullSecrets | Specify an image pull secret if needed | `Commented Out` | -| nodeSelector | Node labels for pod assignment | `{}` | -| service.headless | Allows you to setup a headless service | `false` | -| service.type | Service Type | `ClusterIP` | -| service.port | Service Port | `1433` | -| service.annotations | Kubernetes service annotations | `{}` | -| service.labels | Kubernetes service labels | `{}` | -| deployment.annotations | Kubernetes deployment annotations | `{}` | -| deployment.labels | Kubernetes deployment labels | `{}` | -| pod.annotations | Kubernetes pod annotations | `{}` | -| pod.labels | Kubernetes pod labels | `{}` | -| collation | Default collation for SQL Server | `SQL_Latin1_General_CP1_CI_AS` | -| dataDir | Specify the default SQL data directory | `/var/opt/mssql` | -| lcid | Default languages for SQL Server | `1033` | -| hadr | Enable Availability Group | `0` | -| replicaCount | Set the number of replica | `1` | -| persistence.enabled | Persist the Data and Log files for SQL Server | `false` | -| persistence.existingDataClaim | Identify an existing Claim to be used for the Data Directory | `Commented Out` | -| persistence.storageClass | Storage Class to be used | `Commented Out` | -| persistence.dataAccessMode | Data Access Mode to be used for the Data Directory | `ReadWriteOnce` | -| persistence.dataSize | PVC Size for Data Directory | `1Gi` | - -> 1 - [Please read password requirements](https://docs.microsoft.com/en-us/sql/relational-databases/security/password-policy) - -## Liveness and Readiness - -The SQL Server instance has liveness and readiness checks specified. These parameters can be used to tune the sensitivity of the liveness and readiness checks. - -### Liveness Probes - -| Parameter | Description | Default | -| --------------------------------- | ------------------------------------------------------------------------------------ | ------- | -| livenessprobe.initialDelaySeconds | Tells the kubelet that it should wait XX second(s) before performing the first probe | `15` | -| livenessprobe.periodSeconds | Field specifies that the kubelet should perform a liveness probe every XX seconds(s) | `20` | - -### Readiness Probes - -| Parameter | Description | Default | -| ----------------------------------- | ------------------------------------------------------------------------------------ | ------- | -| readinessprobe.initialDelaySeconds | Tells the kubelet that it should wait XX second(s) before performing the first probe | 5 | -| readinessprobe.periodSeconds | Field specifies that the kubelet should perform a liveness probe every XX second(s) | 10 | - -## Resources - -You can specify the resource limits for this chart in the values.yaml file. Make sure you comment out or remove the curly brackets from the values.yaml file before specifying resource limits. -Example: - -```yaml -resources: - limits: - cpu: 1 - memory: 2Gi - requests: - cpu: 0.5 - memory: 2Gi -``` - -## Persistence Examples - -Persistence in this chart can be enabled by specifying `persistence.enabled=true`. The path to the database's data and log files can be customized to fit different requirements. - -* Example 1 - Enable persistence in values.yaml without specifying claim -> Note - This is useful for local development in a minikube environment - -```yaml -persistence: - enabled: true - # existingDataClaim: - # existingTransactionLogClaim: - # storageClass: "-" - dataAccessMode: ReadWriteOnce - dataSize: 1Gi - logAccessMode: ReadWriteOnce - logSize: 1Gi -``` - -* Example 2 - Enable persistence in values.yaml with existing claim -> Note - This is useful for production based environments for persistence volumes and claims already exist. - -```yaml -persistence: - enabled: true - existingDataClaim: pvc-mssql-data - existingTransactionLogClaim: pvc-mssql-log - # storageClass: "-" - # dataAccessMode: ReadWriteOnce - # dataSize: 1Gi - # logAccessMode: ReadWriteOnce - # logSize: 1Gi -``` - -## SQL Server for Linux Editions - -Below are the supported versions of SQL Server on Linux. You can find out more information [here](https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-editions-and-components-2017). - -* Developer : This will run the container using the Developer Edition (this is the default if no MSSQL_PID environment variable is supplied) -* Express : This will run the container using the Express Edition -* Standard : This will run the container using the Standard Edition -* Enterprise : This will run the container using the Enterprise Edition -* EnterpriseCore : This will run the container using the Enterprise Edition Core -* Product ID: This will run the container with the edition that is associated with the PID - -## Collation and Language Support - -You can change the collation of the MSSQL installation by changing the `collation` key in the `values.yaml` file. More information about Collation and Unicode Support can be found on the [Microsoft Docs Page](https://docs.microsoft.com/en-us/sql/relational-databases/collations/collation-and-unicode-support). - -To change the language of the MSSQL installation, change the `lcid` key in the `values.yaml`. More informationa about languages can be found using the system view `sys.syslanguages`. A list of available languages can be found [here](https://docs.microsoft.com/en-us/sql/relational-databases/system-compatibility-views/sys-syslanguages-transact-sql). - -* Example 1 - Retrieve Collation and Language - -```sql -1>select substring(convert(varchar(30),serverproperty('Collation')),1,30), substring(convert(varchar(20),serverproperty('lcid')),1,20); -2>go -``` - -## Master database files - -As part of this chart the `master` database is configured to be installed based in the `/mssql-data/master`. - -## HADR - -As part of this chart you can enable your SQL Server container for Availability Groups. As an administrator, you will need to configure additional settings once this options is enabled. For more information on Availability Group(s) [click here](https://docs.microsoft.com/en-us/sql/database-engine/availability-groups/windows/overview-of-always-on-availability-groups-sql-server?view=sql-server-2017) for more information. - -### Query to determine if HADR is enabled - -```sql -1>SELECT SERVERPROPERTY ('IsHadrEnabled'); -2>go -``` diff --git a/charts/jum-db/templates/NOTES.txt b/charts/jum-db/templates/NOTES.txt deleted file mode 100644 index 89d4f169..00000000 --- a/charts/jum-db/templates/NOTES.txt +++ /dev/null @@ -1,30 +0,0 @@ -License Terms for MSSQL Server -Please read the License Terms Carefully. The can be found End-User Licensing Agreement. - - -License Terms: https://go.microsoft.com/fwlink/?linkid=857698 -Docker Hub Resource: https://hub.docker.com/_/microsoft-mssql-server - -Edition for this installation: {{ .Values.edition.value }} -SQL Server Name: {{ template "jum-db.fullname" . }}.{{ .Release.Namespace }} -Port: {{ .Values.service.port }} -Collation: {{ .Values.collation }} - -Note - By Default the Express Edition is installed as part of this Chart. - -Gain access to your SQL Server: -1. Get SA Password -$ printf $(kubectl get jum-db --namespace {{ .Release.Namespace }} {{ template "jum-db.fullname" . }}-jum-db -o jsonpath="{.data.sapassword}" | base64 --decode);echo -2. You can test that SQL Server is available by the service port with with the following set of command: -(Note: You will be prompted for the SA password, use the password generated in Step 1) -$ kubectl run mssqlcli --image=mcr.microsoft.com/mssql-tools -ti --restart=Never --rm=true -- /bin/bash -$ sqlcmd -S {{ template "jum-db.fullname" . }}.{{ .Release.Namespace }},{{ .Values.service.port }} -U sa -$ Password: - -2. Connection Library Information -https://docs.microsoft.com/en-us/sql/connect/sql-connection-libraries - -3. Connecting with JDBC -https://docs.microsoft.com/en-us/sql/connect/jdbc/connecting-to-sql-server-with-the-jdbc-driver - - diff --git a/charts/jum-db/templates/_helpers.tpl b/charts/jum-db/templates/_helpers.tpl deleted file mode 100644 index 01955952..00000000 --- a/charts/jum-db/templates/_helpers.tpl +++ /dev/null @@ -1,63 +0,0 @@ -{{/* vim: set filetype=mustache: */}} -{{/* -Expand the name of the chart. -*/}} -{{- define "jum-db.name" -}} -{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} -{{- end -}} - -{{/* -Create chart name and version as used by the chart label. -*/}} -{{- define "jum-db.chart" -}} -{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} -{{- end }} - -{{/* -Create the name of the service account to use -*/}} -{{- define "jum-db.accountName" -}} -{{- if .Values.serviceAccount.create }} -{{- default (include "jum-db.fullname" .) .Values.serviceAccount.name }} -{{- else }} -{{- default "default" .Values.serviceAccount.name }} -{{- end }} -{{- end }} - -{{/* -Selector labels -*/}} -{{- define "jum-db.selectorLabels" -}} -app.kubernetes.io/name: {{ include "jum-db.name" . }} -app.kubernetes.io/instance: {{ .Release.Name }} -{{- end }} - -{{/* -Common labels -*/}} -{{- define "jum-db.labels" -}} -helm.sh/chart: {{ include "jum-db.chart" . }} -{{ include "jum-db.selectorLabels" . }} -{{- if .Chart.AppVersion }} -app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} -{{- end }} -app.kubernetes.io/managed-by: {{ .Release.Service }} -{{- end }} - -{{/* -Create a default fully qualified app name. -We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). -If release name contains chart name it will be used as a full name. -*/}} -{{- define "jum-db.fullname" -}} -{{- if .Values.fullnameOverride -}} -{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} -{{- else -}} -{{- $name := default .Chart.Name .Values.nameOverride -}} -{{- if contains $name .Release.Name -}} -{{- printf .Release.Name | trunc 63 | trimSuffix "-" -}} -{{- else -}} -{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} -{{- end -}} -{{- end -}} -{{- end -}} diff --git a/charts/jum-db/templates/deployment.yaml b/charts/jum-db/templates/deployment.yaml deleted file mode 100644 index 57ee1b65..00000000 --- a/charts/jum-db/templates/deployment.yaml +++ /dev/null @@ -1,109 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - name: {{ template "jum-db.fullname" . }} - labels: - app: {{ template "jum-db.name" . }} - chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} - release: {{ .Release.Name }} - heritage: {{ .Release.Service }} -{{- if .Values.deployment.labels }} -{{ toYaml .Values.deployment.labels | indent 4 }} -{{- end }} -{{- if .Values.deployment.annotations }} - annotations: -{{ toYaml .Values.deployment.annotations | indent 4 }} -{{- end }} -spec: - replicas: {{ .Values.replicaCount }} - selector: - matchLabels: - app: {{ template "jum-db.name" . }} - release: {{ .Release.Name }} - template: - metadata: - labels: - app: {{ template "jum-db.name" . }} - release: {{ .Release.Name }} -{{- if .Values.pod.labels }} -{{ toYaml .Values.pod.labels | indent 8 }} -{{- end }} -{{- if .Values.pod.annotations }} - annotations: -{{ toYaml .Values.pod.annotations | indent 8 }} -{{- end }} - spec: - terminationGracePeriodSeconds: 30 - securityContext: - {{- toYaml .Values.podSecurityContext | nindent 8 }} - containers: - - name: {{ .Chart.Name }} - securityContext: - {{- toYaml .Values.securityContext | nindent 12 }} - image: "{{ .Values.global.image.registry }}/{{ .Values.image.repository }}:{{ .Values.global.image.tag | default .Chart.AppVersion }}" - {{- if .Values.image.pullSecrets }} - imagePullSecrets: - {{ toYaml .Values.image.pullSecrets | indent 10 }} - {{- end }} - imagePullPolicy: {{ .Values.image.pullPolicy }} - env: - - name: ACCEPT_EULA - value: "{{ .Values.acceptEula.value | upper }}" - - name: MSSQL_PID - value: "{{ .Values.edition.value }}" - - name: SA_PASSWORD - valueFrom: - secretKeyRef: - name: {{ template "jum-db.fullname" . }}-secret - key: sapassword - - name: JUM_DB_DATA_DIR - value: {{ .Values.dataDir }} - - name: JUM_DB_TCP_PORT - value: "{{ .Values.service.port }}" - - name: JUM_DB_COLLATION - value: "{{ .Values.collation }}" - - name: JUM_DB_LCID - value: "{{ .Values.lcid }}" - - name: JUM_DB_ENABLE_HADR - value: "{{ .Values.hadr }}" -# {{ if .Values.resources.limits.memory }} -# - name: JUM_DB_MEMORY_LIMIT_MB -# valueFrom: -# resourceFieldRef: -# resource: limits.memory -# divisor: 1Mi -# {{ end }} - ports: - - name: jum-db - containerPort: {{ .Values.service.port }} - volumeMounts: - - name: data - mountPath: /var/opt/jum-db - livenessProbe: - tcpSocket: - port: jum-db - initialDelaySeconds: {{ .Values.livenessprobe.initialDelaySeconds }} - periodSeconds: {{ .Values.livenessprobe.periodSeconds }} - readinessProbe: - tcpSocket: - port: jum-db - initialDelaySeconds: {{ .Values.readinessprobe.initialDelaySeconds }} - periodSeconds: {{ .Values.readinessprobe.periodSeconds }} - resources: -{{ toYaml .Values.resources | indent 12 }} - {{- if .Values.nodeSelector }} - nodeSelector: -{{ toYaml .Values.nodeSelector | indent 8 }} - {{- end }} - volumes: - - name: data - {{- if .Values.persistence.enabled }} - persistentVolumeClaim: - {{- if .Values.persistence.existingDataClaim }} - claimName: {{ .Values.persistence.existingDataClaim }} - {{- else }} - claimName: {{ template "jum-db.fullname" . }}-data - {{- end -}} - {{- else }} - emptyDir: {} - {{- end }} diff --git a/charts/jum-db/templates/pvc-data.yaml b/charts/jum-db/templates/pvc-data.yaml deleted file mode 100644 index 1415677c..00000000 --- a/charts/jum-db/templates/pvc-data.yaml +++ /dev/null @@ -1,28 +0,0 @@ -{{- if and .Values.persistence.enabled (not .Values.persistence.existingDataClaim) }} -kind: PersistentVolumeClaim -apiVersion: v1 -metadata: - name: {{ template "jum-db.fullname" . }}-data - labels: - app: {{ template "jum-db.fullname" . }} - chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" - release: "{{ .Release.Name }}" - heritage: "{{ .Release.Service }}" -{{- if .Values.persistence.annotations }} - annotations: -{{ toYaml .Values.persistence.annotations | indent 4 }} -{{- end }} -spec: - accessModes: - - {{ .Values.persistence.dataAccessMode | quote }} - resources: - requests: - storage: {{ .Values.persistence.dataSize | quote }} -{{- if .Values.persistence.storageClass }} -{{- if (eq "-" .Values.persistence.storageClass) }} - storageClassName: "" -{{- else }} - storageClassName: "{{ .Values.persistence.storageClass }}" -{{- end }} -{{- end }} -{{- end -}} diff --git a/charts/jum-db/templates/secret.yaml b/charts/jum-db/templates/secret.yaml deleted file mode 100644 index 8231c088..00000000 --- a/charts/jum-db/templates/secret.yaml +++ /dev/null @@ -1,16 +0,0 @@ -apiVersion: v1 -kind: Secret -metadata: - name: {{ template "jum-db.fullname" . }}-secret - labels: - app: {{ template "jum-db.name" . }} - chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} - release: {{ .Release.Name }} - heritage: {{ .Release.Service }} -type: Opaque -data: - {{ if .Values.sapassword }} - sapassword: {{ .Values.sapassword | b64enc | quote }} - {{ else }} - sapassword: {{ randAlphaNum 20 | b64enc | quote }} - {{ end }} \ No newline at end of file diff --git a/charts/jum-db/templates/service.yaml b/charts/jum-db/templates/service.yaml deleted file mode 100644 index abd3c334..00000000 --- a/charts/jum-db/templates/service.yaml +++ /dev/null @@ -1,31 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - name: {{ template "jum-db.name" . }} - labels: - app: {{ template "jum-db.name" . }} - chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} - release: {{ .Release.Name }} - heritage: {{ .Release.Service }} -{{- if .Values.service.labels }} -{{ toYaml .Values.service.labels | indent 4 }} -{{- end }} -{{- if .Values.service.annotations }} - annotations: -{{ toYaml .Values.service.annotations | indent 4 }} -{{- end }} -spec: - {{- if .Values.service.headless }} - type: ClusterIP - clusterIP: None - {{- else }} - type: {{ .Values.service.type }} - {{- end }} - ports: - - name: mssql - port: {{ .Values.service.port }} - targetPort: jum-db - protocol: TCP - selector: - app: {{ template "jum-db.name" . }} - release: {{ .Release.Name }} diff --git a/charts/jum-db/templates/serviceaccount.yaml b/charts/jum-db/templates/serviceaccount.yaml deleted file mode 100644 index 436b44e0..00000000 --- a/charts/jum-db/templates/serviceaccount.yaml +++ /dev/null @@ -1,12 +0,0 @@ -{{- if .Values.serviceAccount.create -}} -apiVersion: v1 -kind: ServiceAccount -metadata: - name: {{ include "jum-db.accountName" . }} - labels: - {{- include "jum-db.labels" . | nindent 4 }} - {{- with .Values.serviceAccount.annotations }} - annotations: - {{- toYaml . | nindent 4 }} - {{- end }} -{{- end }} diff --git a/charts/jum-db/values.yaml b/charts/jum-db/values.yaml deleted file mode 100644 index 58ec318a..00000000 --- a/charts/jum-db/values.yaml +++ /dev/null @@ -1,88 +0,0 @@ -global: - vanityURL: "jum-db-e27db1-dev.apps.gold.devops.gov.bc.ca" - commit_sha: "" - image: - registry: image-registry.openshift-image-registry.svc:5000/e27db1-tools - tag: latest - -image: - repository: jum-database - tag: latest - pullPolicy: Always - -acceptEula: - value: "y" -edition: - value: Developer -collation: SQL_Latin1_General_CP1_CI_AS -dataDir: /var/opt/mssql -lcid: 1033 -hadr: 0 -replicaCount: 1 -# Override sapassword in templates/secret.yaml -# sapassword: "MyStrongPassword1234" - - -serviceAccount: - # Specifies whether a service account should be created - create: true - # Annotations to add to the service account - annotations: {} - # The name of the service account to use. - # If not set and create is true, a name is generated using the fullname template - name: "jum-db-service" - -podAnnotations: {} - -podSecurityContext: {} - # fsGroup: 2000 - -securityContext: {} -# capabilities: -# drop: -# - KILL -# - MKNOD -# - SETGID -# - SETUID -# runAsUser: 1002190000 - # capabilities: - # drop: - # - ALL - # readOnlyRootFilesystem: true - # runAsNonRoot: true - # runAsUser: 1000 - -service: - # If headless is set to TRUE then the service type is ignored - headless: false - type: ClusterIP - port: 1433 - annotations: {} - labels: {} -deployment: - annotations: {} - labels: {} -pod: - annotations: {} - labels: {} -persistence: - enabled: true - # existingDataClaim: - storageClass: "" - dataAccessMode: ReadWriteOnce - dataSize: 1Gi -livenessprobe: - initialDelaySeconds: 45 - periodSeconds: 20 -readinessprobe: - initialDelaySeconds: 30 - periodSeconds: 10 -resources: - limits: - cpu: 750m - memory: 4Gi - requests: - cpu: 100m - memory: 500Mi -nodeSelector: {} - # kubernetes.io/hostname: microk8s diff --git a/charts/jum-notification/.helmignore b/charts/jum-notification/.helmignore deleted file mode 100644 index 0e8a0eb3..00000000 --- a/charts/jum-notification/.helmignore +++ /dev/null @@ -1,23 +0,0 @@ -# Patterns to ignore when building packages. -# This supports shell glob matching, relative path matching, and -# negation (prefixed with !). Only one pattern per line. -.DS_Store -# Common VCS dirs -.git/ -.gitignore -.bzr/ -.bzrignore -.hg/ -.hgignore -.svn/ -# Common backup files -*.swp -*.bak -*.tmp -*.orig -*~ -# Various IDEs -.project -.idea/ -*.tmproj -.vscode/ diff --git a/charts/jum-notification/Chart.yaml b/charts/jum-notification/Chart.yaml deleted file mode 100644 index a90f9b1f..00000000 --- a/charts/jum-notification/Chart.yaml +++ /dev/null @@ -1,24 +0,0 @@ -apiVersion: v2 -name: jum-notification -description: A Helm chart for Kubernetes - -# A chart can be either an 'application' or a 'library' chart. -# -# Application charts are a collection of templates that can be packaged into versioned archives -# to be deployed. -# -# Library charts provide useful utilities or functions for the chart developer. They're included as -# a dependency of application charts to inject those utilities and functions into the rendering -# pipeline. Library charts do not define any templates and therefore cannot be deployed. -type: application - -# This is the chart version. This version number should be incremented each time you make changes -# to the chart and its templates, including the app version. -# Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 0.2.0 - -# This is the version number of the application being deployed. This version number should be -# incremented each time you make changes to the application. Versions are not expected to -# follow Semantic Versioning. They should reflect the version the application is using. -# It is recommended to use it with quotes. -appVersion: "1.16.0" diff --git a/charts/jum-notification/templates/NOTES.txt b/charts/jum-notification/templates/NOTES.txt deleted file mode 100644 index b4adc87b..00000000 --- a/charts/jum-notification/templates/NOTES.txt +++ /dev/null @@ -1,22 +0,0 @@ -1. Get the application URL by running these commands: -{{- if .Values.ingress.enabled }} -{{- range $host := .Values.ingress.hosts }} - {{- range .paths }} - http{{ if $.Values.ingress.tls }}s{{ end }}://{{ $host.host }}{{ .path }} - {{- end }} -{{- end }} -{{- else if contains "NodePort" .Values.service.type }} - export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "notification.fullname" . }}) - export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}") - echo http://$NODE_IP:$NODE_PORT -{{- else if contains "LoadBalancer" .Values.service.type }} - NOTE: It may take a few minutes for the LoadBalancer IP to be available. - You can watch the status of by running 'kubectl get --namespace {{ .Release.Namespace }} svc -w {{ include "notification.fullname" . }}' - export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "notification.fullname" . }} --template "{{"{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}") - echo http://$SERVICE_IP:{{ .Values.service.port }} -{{- else if contains "ClusterIP" .Values.service.type }} - export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name={{ include "notification.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") - export CONTAINER_PORT=$(kubectl get pod --namespace {{ .Release.Namespace }} $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}") - echo "Visit http://127.0.0.1:8080 to use your application" - kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME 8080:$CONTAINER_PORT -{{- end }} diff --git a/charts/jum-notification/templates/_helpers.tpl b/charts/jum-notification/templates/_helpers.tpl deleted file mode 100644 index 60ebe6c2..00000000 --- a/charts/jum-notification/templates/_helpers.tpl +++ /dev/null @@ -1,53 +0,0 @@ -{{/* -Expand the name of the chart. -*/}} -{{- define "notification.name" -}} -{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }} -{{- end }} - -{{/* -Create a default fully qualified app name. -We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). -If release name contains chart name it will be used as a full name. -*/}} -{{- define "notification.fullname" -}} -{{- if .Values.fullnameOverride }} -{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }} -{{- else }} -{{- $name := default .Chart.Name .Values.nameOverride }} -{{- if contains $name .Release.Name }} -{{- .Release.Name | trunc 63 | trimSuffix "-" }} -{{- else }} -{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }} -{{- end }} -{{- end }} -{{- end }} - -{{/* -Create chart name and version as used by the chart label. -*/}} -{{- define "notification.chart" -}} -{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} -{{- end }} - -{{/* -Common labels -*/}} -{{- define "notification.labels" -}} -helm.sh/chart: {{ include "notification.chart" . }} -{{ include "notification.selectorLabels" . }} -{{- if .Chart.AppVersion }} -app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} -{{- end }} -app.kubernetes.io/managed-by: {{ .Release.Service }} -{{- end }} - -{{/* -Selector labels -*/}} -{{- define "notification.selectorLabels" -}} -app.kubernetes.io/name: {{ include "notification.name" . }} -app.kubernetes.io/instance: {{ .Release.Name }} -{{- end }} - - diff --git a/charts/jum-notification/templates/deployment.yaml b/charts/jum-notification/templates/deployment.yaml deleted file mode 100644 index a5c9c6b2..00000000 --- a/charts/jum-notification/templates/deployment.yaml +++ /dev/null @@ -1,134 +0,0 @@ -{{ $release := .Release.Name }} -{{ $ocEnv := regexFind "([^-]*$)" .Release.Namespace }} -{{ $domain := .Values.global.vanityURL }} -{{ $isPR := hasPrefix "pr-" .Release.Name }} -## Derived release name -{{ $drn := ternary $release $ocEnv $isPR }} -{{ $isProd := contains "prod" $ocEnv }} -# -apiVersion: apps/v1 -kind: Deployment -metadata: - name: {{ include "notification.fullname" . }} - labels: - {{- include "notification.labels" . | nindent 4 }} -spec: - {{- if not .Values.autoscaling.enabled }} - replicas: {{ .Values.replicaCount }} - {{- end }} - selector: - matchLabels: - {{- include "notification.selectorLabels" . | nindent 6 }} - template: - metadata: - annotations: - vault.hashicorp.com/agent-inject: 'true' - vault.hashicorp.com/agent-pre-populate-only: 'true' - vault.hashicorp.com/auth-path: auth/k8s-gold - vault.hashicorp.com/namespace: platform-services - vault.hashicorp.com/agent-requests-cpu: 5m - vault.hashicorp.com/agent-limits-cpu: 10m - vault.hashicorp.com/agent-requests-mem: 20Mi - vault.hashicorp.com/role: {{ .Values.global.vault.role }} # licenseplate-nonprod or licenseplate-prod are your options - vault.hashicorp.com/agent-inject-secret-DIAM-common: {{ .Values.global.vault.role }}/{{ .Values.global.vault.path }}DIAM-common - vault.hashicorp.com/agent-inject-template-DIAM-common: | - {{`{{- with secret `}}"{{ .Values.global.vault.role }}/{{ .Values.global.vault.path }}DIAM-common"{{` }} - {{- range $k, $v := .Data.data }} - {{ $k }}="{{ $v }}"{{ end -}} - {{- end `}} }} - vault.hashicorp.com/agent-inject-secret-DIAM-notification: {{ .Values.global.vault.role }}/{{ .Values.global.vault.path }}DIAM-notification - vault.hashicorp.com/agent-inject-template-DIAM-notification: | - {{`{{- with secret `}}"{{ .Values.global.vault.role }}/{{ .Values.global.vault.path }}DIAM-notification"{{` }} - {{- range $k, $v := .Data.data }} - {{ $k }}="{{ $v }}"{{ end -}} - {{- end `}} }} - vault.hashicorp.com/agent-inject-secret-DIAM-keycloak: {{ .Values.global.vault.role }}/{{ .Values.global.vault.path }}DIAM-keycloak - vault.hashicorp.com/agent-inject-template-DIAM-keycloak: | - {{`{{- with secret `}}"{{ .Values.global.vault.role }}/{{ .Values.global.vault.path }}DIAM-keycloak"{{` }} - {{- range $k, $v := .Data.data }} - {{ $k }}="{{ $v }}"{{ end -}} - {{- end `}} }} - {{- if .Values.global.commit_sha }} - commit_sha: {{ .Values.global.commit_sha }} - {{- end}} - {{- with .Values.podAnnotations }} - {{- toYaml . | nindent 8 }} - {{- end }} - labels: - {{- include "notification.selectorLabels" . | nindent 8 }} - spec: - serviceAccountName: {{ .Values.global.licenseplate }}-vault - securityContext: - {{- toYaml .Values.podSecurityContext | nindent 8 }} - containers: - - name: {{ .Chart.Name }} - securityContext: - {{- toYaml .Values.securityContext | nindent 12 }} - image: {{ .Values.global.image.registry }}/{{ .Values.image.repository }}:{{ .Values.global.image.tag | default .Chart.AppVersion }} - imagePullPolicy: {{ .Values.image.pullPolicy }} - env: - - name: ApplicationUrl - value: "https://{{ if $isProd }}{{else}}{{ $release }}.{{end}}{{ $domain }}" - volumeMounts: - - name: kafka-truststore - mountPath: "/opt/kafka/certificates" - readOnly: true - - name: templates-volume - mountPath: /opt/emailtemplates - envFrom: - - secretRef: - name: ches - - configMapRef: - name: mail-settings - - configMapRef: - name: notification-template-enviroment - ports: - - name: http - containerPort: 8080 - protocol: TCP - livenessProbe: - httpGet: - path: /health/liveness - port: http - scheme: HTTP - timeoutSeconds: 5 - periodSeconds: 30 - successThreshold: 1 - failureThreshold: 3 - # startupProbe: - # httpGet: - # path: /health/liveness - # port: http - # scheme: HTTP - # timeoutSeconds: 1 - # periodSeconds: 10 - #successThreshold: 1 - #failureThreshold: 30 - # readinessProbe: - # httpGet: - # path: / - # port: http - resources: - {{- toYaml .Values.resources | nindent 12 }} - {{- with .Values.nodeSelector }} - nodeSelector: - {{- toYaml . | nindent 8 }} - {{- end }} - {{- with .Values.affinity }} - affinity: - {{- toYaml . | nindent 8 }} - {{- end }} - {{- with .Values.tolerations }} - tolerations: - {{- toYaml . | nindent 8 }} - {{- end }} - volumes: - - name: templates-volume - configMap: - name: notification-templates - - name: kafka-truststore - secret: - secretName: kafka-cluster-client-truststore - - name: truststore-key - secret: - secretName: kafka-cluster-client-key \ No newline at end of file diff --git a/charts/jum-notification/templates/hpa.yaml b/charts/jum-notification/templates/hpa.yaml deleted file mode 100644 index 6b3ebdaf..00000000 --- a/charts/jum-notification/templates/hpa.yaml +++ /dev/null @@ -1,28 +0,0 @@ -{{- if .Values.autoscaling.enabled }} -apiVersion: autoscaling/v2beta1 -kind: HorizontalPodAutoscaler -metadata: - name: {{ include "notification.fullname" . }} - labels: - {{- include "notification.labels" . | nindent 4 }} -spec: - scaleTargetRef: - apiVersion: apps/v1 - kind: Deployment - name: {{ include "notification.fullname" . }} - minReplicas: {{ .Values.autoscaling.minReplicas }} - maxReplicas: {{ .Values.autoscaling.maxReplicas }} - metrics: - {{- if .Values.autoscaling.targetCPUUtilizationPercentage }} - - type: Resource - resource: - name: cpu - targetAverageUtilization: {{ .Values.autoscaling.targetCPUUtilizationPercentage }} - {{- end }} - {{- if .Values.autoscaling.targetMemoryUtilizationPercentage }} - - type: Resource - resource: - name: memory - targetAverageUtilization: {{ .Values.autoscaling.targetMemoryUtilizationPercentage }} - {{- end }} -{{- end }} diff --git a/charts/jum-notification/templates/ingress.yaml b/charts/jum-notification/templates/ingress.yaml deleted file mode 100644 index a9ae8f13..00000000 --- a/charts/jum-notification/templates/ingress.yaml +++ /dev/null @@ -1,61 +0,0 @@ -{{- if .Values.ingress.enabled -}} -{{- $fullName := include "notification.fullname" . -}} -{{- $svcPort := .Values.service.port -}} -{{- if and .Values.ingress.className (not (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion)) }} - {{- if not (hasKey .Values.ingress.annotations "kubernetes.io/ingress.class") }} - {{- $_ := set .Values.ingress.annotations "kubernetes.io/ingress.class" .Values.ingress.className}} - {{- end }} -{{- end }} -{{- if semverCompare ">=1.19-0" .Capabilities.KubeVersion.GitVersion -}} -apiVersion: networking.k8s.io/v1 -{{- else if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion -}} -apiVersion: networking.k8s.io/v1beta1 -{{- else -}} -apiVersion: extensions/v1beta1 -{{- end }} -kind: Ingress -metadata: - name: {{ $fullName }} - labels: - {{- include "notification.labels" . | nindent 4 }} - {{- with .Values.ingress.annotations }} - annotations: - {{- toYaml . | nindent 4 }} - {{- end }} -spec: - {{- if and .Values.ingress.className (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion) }} - ingressClassName: {{ .Values.ingress.className }} - {{- end }} - {{- if .Values.ingress.tls }} - tls: - {{- range .Values.ingress.tls }} - - hosts: - {{- range .hosts }} - - {{ . | quote }} - {{- end }} - secretName: {{ .secretName }} - {{- end }} - {{- end }} - rules: - {{- range .Values.ingress.hosts }} - - host: {{ .host | quote }} - http: - paths: - {{- range .paths }} - - path: {{ .path }} - {{- if and .pathType (semverCompare ">=1.18-0" $.Capabilities.KubeVersion.GitVersion) }} - pathType: {{ .pathType }} - {{- end }} - backend: - {{- if semverCompare ">=1.19-0" $.Capabilities.KubeVersion.GitVersion }} - service: - name: {{ $fullName }} - port: - number: {{ $svcPort }} - {{- else }} - serviceName: {{ $fullName }} - servicePort: {{ $svcPort }} - {{- end }} - {{- end }} - {{- end }} -{{- end }} diff --git a/charts/jum-notification/templates/migrations.yaml b/charts/jum-notification/templates/migrations.yaml deleted file mode 100644 index fa998768..00000000 --- a/charts/jum-notification/templates/migrations.yaml +++ /dev/null @@ -1,45 +0,0 @@ -{{- if .Values.migrations.enabled }} -{{ $release := .Release.Name }} -{{ $ocEnv := regexFind "([^-]*$)" .Release.Namespace }} -{{ $isPR := hasPrefix "pr-" .Release.Name }} -## Derived release name -{{ $drn := ternary $release $ocEnv $isPR }} -# -apiVersion: batch/v1 -kind: Job -metadata: - name: {{ include "notification.fullname" . }}-migrations - annotations: - helm.sh/hook: pre-install, pre-upgrade - helm.sh/hook-weight: "10" - labels: - {{- include "notification.labels" . | nindent 4 }} -spec: - ttlSecondsAfterFinished: 30 - template: - spec: - containers: - - name: migrations - image: {{ .Values.global.image.registry }}/{{ .Values.image.repository }}:{{ .Values.global.image.tag | default .Chart.AppVersion }} - imagePullPolicy: Always - command: ['./efbundle', '--connection', '$(ConnectionStrings__jumDatabase)'] - env: - - name: DB_HOST - value: jum-database - - name: POSTGRESQL_PASSWORD - value: - - name: POSTGRESQL_USER - value: admin - - name: POSTGRESQL_DATABASE - value: JumDB - - name: DOTNET_BUNDLE_EXTRACT_BASE_DIR - value: /tmp - - name: ConnectionStrings__jumDatabase - valueFrom: - configMapKeyRef: - name: jum-api-database - key: CONNECTION_STRINGS_JUM - restartPolicy: Never - backoffLimit: 3 -{{- end }} - diff --git a/charts/jum-notification/templates/service.yaml b/charts/jum-notification/templates/service.yaml deleted file mode 100644 index a54e9fb9..00000000 --- a/charts/jum-notification/templates/service.yaml +++ /dev/null @@ -1,15 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - name: {{ include "notification.fullname" . }} - labels: - {{- include "notification.labels" . | nindent 4 }} -spec: - type: {{ .Values.service.type }} - ports: - - port: {{ .Values.service.port }} - targetPort: http - protocol: TCP - name: http - selector: - {{- include "notification.selectorLabels" . | nindent 4 }} diff --git a/charts/jum-notification/templates/serviceaccount.yaml b/charts/jum-notification/templates/serviceaccount.yaml deleted file mode 100644 index e67c32f8..00000000 --- a/charts/jum-notification/templates/serviceaccount.yaml +++ /dev/null @@ -1,12 +0,0 @@ -{{- if .Values.serviceAccount.create -}} -apiVersion: v1 -kind: ServiceAccount -metadata: - name: {{ include "notification.serviceAccountName" . }} - labels: - {{- include "notification.labels" . | nindent 4 }} - {{- with .Values.serviceAccount.annotations }} - annotations: - {{- toYaml . | nindent 4 }} - {{- end }} -{{- end }} diff --git a/charts/jum-notification/templates/tests/test-connection.yaml b/charts/jum-notification/templates/tests/test-connection.yaml deleted file mode 100644 index 5846301d..00000000 --- a/charts/jum-notification/templates/tests/test-connection.yaml +++ /dev/null @@ -1,15 +0,0 @@ -apiVersion: v1 -kind: Pod -metadata: - name: "{{ include "notification.fullname" . }}-test-connection" - labels: - {{- include "notification.labels" . | nindent 4 }} - annotations: - "helm.sh/hook": test -spec: - containers: - - name: wget - image: busybox - command: ['wget'] - args: ['{{ include "notification.fullname" . }}:{{ .Values.service.port }}'] - restartPolicy: Never diff --git a/charts/jum-notification/values.yaml b/charts/jum-notification/values.yaml deleted file mode 100644 index 05fc36da..00000000 --- a/charts/jum-notification/values.yaml +++ /dev/null @@ -1,95 +0,0 @@ -# Default values for backend. -# This is a YAML-formatted file. -# Declare variables to be passed into your templates. - -global: - vanityURL: "notification-api-e27db1-dev.apps.gold.devops.gov.bc.ca" - commit_sha: "" - licenseplate: e27db1 - image: - registry: image-registry.openshift-image-registry.svc:5000/e27db1-tools - tag: develop - -replicaCount: 1 - -image: - repository: jum-notification - pullPolicy: Always - # Overrides the image tag whose default is the chart appVersion. - tag: "develop" - - -# Run migrations pre-install and pre-upgrade -migrations: - enabled: false - -imagePullSecrets: [] -nameOverride: "" -fullnameOverride: "" - -serviceAccount: - # Specifies whether a service account should be created - create: false - # Annotations to add to the service account - annotations: {} - # The name of the service account to use. - # If not set and create is true, a name is generated using the fullname template - name: "" - -podAnnotations: {} - -podSecurityContext: {} - # fsGroup: 2000 - -securityContext: {} - # capabilities: - # drop: - # - ALL - # readOnlyRootFilesystem: true - # runAsNonRoot: true - # runAsUser: 1000 - -service: - type: ClusterIP - port: 8080 - -ingress: - enabled: false - className: "" - annotations: {} - # kubernetes.io/ingress.class: nginx - # kubernetes.io/tls-acme: "true" - hosts: - - host: chart-example.local - paths: - - path: / - pathType: ImplementationSpecific - tls: [] - # - secretName: chart-example-tls - # hosts: - # - chart-example.local - -resources: {} - # We usually recommend not to specify default resources and to leave this as a conscious - # choice for the user. This also increases chances charts run on environments with little - # resources, such as Minikube. If you do want to specify resources, uncomment the following - # lines, adjust them as necessary, and remove the curly braces after 'resources:'. - # limits: - # cpu: 100m - # memory: 128Mi - # requests: - # cpu: 100m - # memory: 128Mi - -autoscaling: - enabled: false - minReplicas: 1 - maxReplicas: 100 - targetCPUUtilizationPercentage: 80 - # targetMemoryUtilizationPercentage: 80 - -nodeSelector: {} - -tolerations: [] - -affinity: {} diff --git a/charts/jum/.helmignore b/charts/jum/.helmignore deleted file mode 100644 index 0e8a0eb3..00000000 --- a/charts/jum/.helmignore +++ /dev/null @@ -1,23 +0,0 @@ -# Patterns to ignore when building packages. -# This supports shell glob matching, relative path matching, and -# negation (prefixed with !). Only one pattern per line. -.DS_Store -# Common VCS dirs -.git/ -.gitignore -.bzr/ -.bzrignore -.hg/ -.hgignore -.svn/ -# Common backup files -*.swp -*.bak -*.tmp -*.orig -*~ -# Various IDEs -.project -.idea/ -*.tmproj -.vscode/ diff --git a/charts/jum/Chart.lock b/charts/jum/Chart.lock deleted file mode 100644 index 7d9be82e..00000000 --- a/charts/jum/Chart.lock +++ /dev/null @@ -1,9 +0,0 @@ -dependencies: -- name: backend - repository: file://../backend - version: 0.1.2 -- name: notification - repository: file://../notification - version: 0.1.2 -digest: sha256:d0c4b3ebcad88fba965c3dc129ebb7c9763aad3f3985739a82aba410eaf0595a -generated: "2022-11-12T15:34:56.7285418-08:00" diff --git a/charts/jum/Chart.yaml b/charts/jum/Chart.yaml deleted file mode 100644 index 39ff8777..00000000 --- a/charts/jum/Chart.yaml +++ /dev/null @@ -1,37 +0,0 @@ -apiVersion: v2 -name: jum -description: A Helm chart for Kubernetes - -# A chart can be either an 'application' or a 'library' chart. -# -# Application charts are a collection of templates that can be packaged into versioned archives -# to be deployed. -# -# Library charts provide useful utilities or functions for the chart developer. They're included as -# a dependency of application charts to inject those utilities and functions into the rendering -# pipeline. Library charts do not define any templates and therefore cannot be deployed. -type: application - -# This is the chart version. This version number should be incremented each time you make changes -# to the chart and its templates, including the app version. -# Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 0.1.3 - -# This is the version number of the application being deployed. This version number should be -# incremented each time you make changes to the application. Versions are not expected to -# follow Semantic Versioning. They should reflect the version the application is using. -# It is recommended to use it with quotes. -appVersion: "0.0.2" - -icon: https://drive.google.com/uc?export=view&id=16JU6XoVz5FvFUXXWCN10JvN-9EEeuEmr - -dependencies: -# - name: jum-db -# repository: "file://../jum-db" -# version: "1.2.0" - - name: backend - repository: "file://../backend" - version: "0.1.2" - - name: notification - repository: "file://../notification" - version: "0.1.2" \ No newline at end of file diff --git a/charts/jum/charts/backend-0.1.2.tgz b/charts/jum/charts/backend-0.1.2.tgz deleted file mode 100644 index 058e106d8dd8d50533013ac3ef68f6946222680c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5220 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 diff --git a/charts/jum/charts/notification-0.1.2.tgz b/charts/jum/charts/notification-0.1.2.tgz deleted file mode 100644 index 7f72aa1e2ffe34513bb4ccd2bc983f0a76f9e3d0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4928 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 diff --git a/charts/jum/templates/NOTES.txt b/charts/jum/templates/NOTES.txt deleted file mode 100644 index a55c2ef3..00000000 --- a/charts/jum/templates/NOTES.txt +++ /dev/null @@ -1,22 +0,0 @@ -1. Get the application URL by running these commands: -{{- if .Values.ingress.enabled }} -{{- range $host := .Values.ingress.hosts }} - {{- range .paths }} - http{{ if $.Values.ingress.tls }}s{{ end }}://{{ $host.host }}{{ .path }} - {{- end }} -{{- end }} -{{- else if contains "NodePort" .Values.service.type }} - export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "jum.fullname" . }}) - export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}") - echo http://$NODE_IP:$NODE_PORT -{{- else if contains "LoadBalancer" .Values.service.type }} - NOTE: It may take a few minutes for the LoadBalancer IP to be available. - You can watch the status of by running 'kubectl get --namespace {{ .Release.Namespace }} svc -w {{ include "jum.fullname" . }}' - export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "jum.fullname" . }} --template "{{"{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}") - echo http://$SERVICE_IP:{{ .Values.service.port }} -{{- else if contains "ClusterIP" .Values.service.type }} - export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name={{ include "jum.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") - export CONTAINER_PORT=$(kubectl get pod --namespace {{ .Release.Namespace }} $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}") - echo "Visit http://127.0.0.1:8080 to use your application" - kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME 8080:$CONTAINER_PORT -{{- end }} diff --git a/charts/jum/templates/_helpers.tpl b/charts/jum/templates/_helpers.tpl deleted file mode 100644 index daa8bdbd..00000000 --- a/charts/jum/templates/_helpers.tpl +++ /dev/null @@ -1,52 +0,0 @@ -{{/* -Expand the name of the chart. -*/}} -{{- define "jum.name" -}} -{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }} -{{- end }} - -{{/* -Create a default fully qualified app name. -We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). -If release name contains chart name it will be used as a full name. -*/}} -{{- define "jum.fullname" -}} -{{- if .Values.fullnameOverride }} -{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }} -{{- else }} -{{- $name := default .Chart.Name .Values.nameOverride }} -{{- if contains $name .Release.Name }} -{{- .Release.Name | trunc 63 | trimSuffix "-" }} -{{- else }} -{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }} -{{- end }} -{{- end }} -{{- end }} - -{{/* -Create chart name and version as used by the chart label. -*/}} -{{- define "jum.chart" -}} -{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} -{{- end }} - -{{/* -Common labels -*/}} -{{- define "jum.labels" -}} -helm.sh/chart: {{ include "jum.chart" . }} -{{ include "jum.selectorLabels" . }} -{{- if .Chart.AppVersion }} -app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} -{{- end }} -app.kubernetes.io/managed-by: {{ .Release.Service }} -{{- end }} - -{{/* -Selector labels -*/}} -{{- define "jum.selectorLabels" -}} -app.kubernetes.io/name: {{ include "jum.name" . }} -app.kubernetes.io/instance: {{ .Release.Name }} -{{- end }} - diff --git a/charts/jum/templates/createdb-job.yaml b/charts/jum/templates/createdb-job.yaml deleted file mode 100644 index f398f0f9..00000000 --- a/charts/jum/templates/createdb-job.yaml +++ /dev/null @@ -1,59 +0,0 @@ -{{- if .Values.database.autoCreate }} -{{ $release := .Release.Name }} -{{ $ocEnv := regexFind "([^-]*$)" .Release.Namespace }} -{{ $isPR := hasPrefix "pr-" .Release.Name }} -## Derived release name -{{ $drn := ternary $release $ocEnv $isPR }} -# -apiVersion: batch/v1 -kind: Job -metadata: - name: {{ include "jum.fullname" . }}-createdb - annotations: - helm.sh/hook: pre-install - helm.sh/hook-weight: "-5" - helm.sh/hook-delete-policy: hook-succeeded - labels: - {{- include "jum.labels" . | nindent 4 }} -spec: - template: - spec: - containers: - - name: createdb - image: {{ .Values.global.image.registry }}/{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }} - imagePullPolicy: Always - command: - - /bin/bash - - -c - - > - createdb -O $(APPUSER) $(PGDATABASE) 2> /dev/null || echo "database already exists" - env: - - name: PGHOST - value:postgresql - - name: PGUSER - valueFrom: - secretKeyRef: - name: postgresql - key: database-user - - name: APPUSER - valueFrom: - secretKeyRef: - name: postgresql - key: database-user - - name: PGPASSWORD - valueFrom: - secretKeyRef: - name: postgresql - key: database-password - - name: PGDATABASE - {{- if $isPR }} - value: "jum_{{ $drn }}" - {{ else }} - valueFrom: - secretKeyRef: - name: postgresql - key: database-name - {{- end }} - restartPolicy: Never - backoffLimit: 3 -{{- end }} diff --git a/charts/jum/templates/dropdb-job.yaml b/charts/jum/templates/dropdb-job.yaml deleted file mode 100644 index 14a0d149..00000000 --- a/charts/jum/templates/dropdb-job.yaml +++ /dev/null @@ -1,53 +0,0 @@ -{{- if hasPrefix "pr-" .Release.Name }} -{{ $release := .Release.Name }} -{{ $ocEnv := regexFind "([^-]*$)" .Release.Namespace }} -{{ $isPR := hasPrefix "pr-" .Release.Name }} -## Derived release name -{{ $drn := ternary $release $ocEnv $isPR }} -# -apiVersion: batch/v1 -kind: Job -metadata: - name: {{ include "jum.fullname" . }}-dropdb - annotations: - helm.sh/hook: post-delete - helm.sh/hook-delete-policy: hook-succeeded - labels: - {{- include "jum.labels" . | nindent 4 }} -spec: - template: - spec: - containers: - - name: dropdb - image: {{ .Values.global.image.registry }}/{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }} - imagePullPolicy: Always - command: - - /bin/bash - - -c - - > - dropdb $(PGDATABASE) - env: - - name: PGHOST - value:postgresql - - name: PGUSER - valueFrom: - secretKeyRef: - name: postgresql - key: database-user - - name: APPUSER - valueFrom: - secretKeyRef: - name: postgresql - key: database-user - - name: PGPASSWORD - valueFrom: - secretKeyRef: - name: postgresql - key: database-password - - name: PGDATABASE - secretKeyRef: - name: postgresql - key: database-name - restartPolicy: Never - backoffLimit: 3 -{{- end }} diff --git a/charts/jum/templates/ingress.yaml b/charts/jum/templates/ingress.yaml deleted file mode 100644 index 02774c95..00000000 --- a/charts/jum/templates/ingress.yaml +++ /dev/null @@ -1,61 +0,0 @@ -{{- if .Values.ingress.enabled -}} -{{- $fullName := include "jum.fullname" . -}} -{{- $svcPort := .Values.service.port -}} -{{- if and .Values.ingress.className (not (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion)) }} - {{- if not (hasKey .Values.ingress.annotations "kubernetes.io/ingress.class") }} - {{- $_ := set .Values.ingress.annotations "kubernetes.io/ingress.class" .Values.ingress.className}} - {{- end }} -{{- end }} -{{- if semverCompare ">=1.19-0" .Capabilities.KubeVersion.GitVersion -}} -apiVersion: networking.k8s.io/v1 -{{- else if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion -}} -apiVersion: networking.k8s.io/v1beta1 -{{- else -}} -apiVersion: extensions/v1beta1 -{{- end }} -kind: Ingress -metadata: - name: {{ $fullName }} - labels: - {{- include "jum.labels" . | nindent 4 }} - {{- with .Values.ingress.annotations }} - annotations: - {{- toYaml . | nindent 4 }} - {{- end }} -spec: - {{- if and .Values.ingress.className (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion) }} - ingressClassName: {{ .Values.ingress.className }} - {{- end }} - {{- if .Values.ingress.tls }} - tls: - {{- range .Values.ingress.tls }} - - hosts: - {{- range .hosts }} - - {{ . | quote }} - {{- end }} - secretName: {{ .secretName }} - {{- end }} - {{- end }} - rules: - {{- range .Values.ingress.hosts }} - - host: {{ .host | quote }} - http: - paths: - {{- range .paths }} - - path: {{ .path }} - {{- if and .pathType (semverCompare ">=1.18-0" $.Capabilities.KubeVersion.GitVersion) }} - pathType: {{ .pathType }} - {{- end }} - backend: - {{- if semverCompare ">=1.19-0" $.Capabilities.KubeVersion.GitVersion }} - service: - name: {{ $fullName }} - port: - number: {{ $svcPort }} - {{- else }} - serviceName: {{ $fullName }} - servicePort: {{ $svcPort }} - {{- end }} - {{- end }} - {{- end }} -{{- end }} diff --git a/charts/jum/templates/serviceaccount.yaml b/charts/jum/templates/serviceaccount.yaml deleted file mode 100644 index f2b591ca..00000000 --- a/charts/jum/templates/serviceaccount.yaml +++ /dev/null @@ -1,12 +0,0 @@ -{{- if .Values.serviceAccount.create -}} -apiVersion: v1 -kind: ServiceAccount -metadata: - name: {{ include "jum.serviceAccountName" . }} - labels: - {{- include "jum.labels" . | nindent 4 }} - {{- with .Values.serviceAccount.annotations }} - annotations: - {{- toYaml . | nindent 4 }} - {{- end }} -{{- end }} diff --git a/charts/jum/templates/tests/test-connection.yaml b/charts/jum/templates/tests/test-connection.yaml deleted file mode 100644 index 28a4a586..00000000 --- a/charts/jum/templates/tests/test-connection.yaml +++ /dev/null @@ -1,15 +0,0 @@ -apiVersion: v1 -kind: Pod -metadata: - name: "{{ include "jum.fullname" . }}-test-connection" - labels: - {{- include "jum.labels" . | nindent 4 }} - annotations: - "helm.sh/hook": test -spec: - containers: - - name: wget - image: busybox - command: ['wget'] - args: ['{{ include "jum.fullname" . }}:{{ .Values.service.port }}'] - restartPolicy: Never diff --git a/charts/jum/values.yaml b/charts/jum/values.yaml deleted file mode 100644 index 1338e9a7..00000000 --- a/charts/jum/values.yaml +++ /dev/null @@ -1,93 +0,0 @@ -# Default values for jum. -# This is a YAML-formatted file. -# Declare variables to be passed into your templates. - -global: - vanityURL: "jum-e27db1-dev.apps.gold.devops.gov.bc.ca" - commit_sha: "" - image: - registry: image-registry.openshift-image-registry.svc:5000/e27db1-tools - tag: develop - -database: - autoCreate: false - -replicaCount: 2 - -image: - repository: nginx - pullPolicy: IfNotPresent - # Overrides the image tag whose default is the chart appVersion. - tag: "" - -imagePullSecrets: [] -nameOverride: "" -fullnameOverride: "" - - -serviceAccount: - # Specifies whether a service account should be created - create: false - # Annotations to add to the service account - annotations: {} - # The name of the service account to use. - # If not set and create is true, a name is generated using the fullname template - name: "" - -podAnnotations: {} - -podSecurityContext: {} - # fsGroup: 2000 - -securityContext: {} - # capabilities: - # drop: - # - ALL - # readOnlyRootFilesystem: true - # runAsNonRoot: true - # runAsUser: 1000 - -service: - type: ClusterIP - port: 8080 - -ingress: - enabled: false - className: "" - annotations: {} - # kubernetes.io/ingress.class: nginx - # kubernetes.io/tls-acme: "true" - hosts: - - host: chart-example.local - paths: - - path: / - pathType: ImplementationSpecific - tls: [] - # - secretName: chart-example-tls - # hosts: - # - chart-example.local - -resources: {} - # We usually recommend not to specify default resources and to leave this as a conscious - # choice for the user. This also increases chances charts run on environments with little - # resources, such as Minikube. If you do want to specify resources, uncomment the following - # lines, adjust them as necessary, and remove the curly braces after 'resources:'. - # limits: - # cpu: 100m - # memory: 128Mi - # requests: - # cpu: 100m - # memory: 128Mi - -autoscaling: - enabled: false - minReplicas: 1 - maxReplicas: 100 - targetCPUUtilizationPercentage: 80 - # targetMemoryUtilizationPercentage: 80 - -nodeSelector: {} - -tolerations: [] - -affinity: {} diff --git a/charts/jumdatabase/.helmignore b/charts/jumdatabase/.helmignore deleted file mode 100644 index 0e8a0eb3..00000000 --- a/charts/jumdatabase/.helmignore +++ /dev/null @@ -1,23 +0,0 @@ -# Patterns to ignore when building packages. -# This supports shell glob matching, relative path matching, and -# negation (prefixed with !). Only one pattern per line. -.DS_Store -# Common VCS dirs -.git/ -.gitignore -.bzr/ -.bzrignore -.hg/ -.hgignore -.svn/ -# Common backup files -*.swp -*.bak -*.tmp -*.orig -*~ -# Various IDEs -.project -.idea/ -*.tmproj -.vscode/ diff --git a/charts/jumdatabase/Chart.yaml b/charts/jumdatabase/Chart.yaml deleted file mode 100644 index 7c5086cf..00000000 --- a/charts/jumdatabase/Chart.yaml +++ /dev/null @@ -1,26 +0,0 @@ -apiVersion: v2 -name: mssql-latest -description: A Helm chart for Kubernetes - -# A chart can be either an 'application' or a 'library' chart. -# -# Application charts are a collection of templates that can be packaged into versioned archives -# to be deployed. -# -# Library charts provide useful utilities or functions for the chart developer. They're included as -# a dependency of application charts to inject those utilities and functions into the rendering -# pipeline. Library charts do not define any templates and therefore cannot be deployed. -type: application - -# This is the chart version. This version number should be incremented each time you make changes -# to the chart and its templates, including the app version. -# Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 0.1.1 - -# This is the version number of the application being deployed. This version number should be -# incremented each time you make changes to the application. Versions are not expected to -# follow Semantic Versioning. They should reflect the version the application is using. -appVersion: 1.16.0 - -annotations: - catalog.cattle.io/hidden: "true" # hide from Rancher catalog \ No newline at end of file diff --git a/charts/jumdatabase/readme.md b/charts/jumdatabase/readme.md deleted file mode 100644 index 8fa15811..00000000 --- a/charts/jumdatabase/readme.md +++ /dev/null @@ -1,99 +0,0 @@ -# Readme.md - -This HELM chart is a sample "as-is" chart provided for reference to help guide with SQL Server deployment on Kubernetes cluster. - -## Prerequisites: - -1. This chart is built on helm v3. It requires a kubernetes cluster to be running for you to deploy SQL container using this chart. -2. Ensure you have the helm installed on the client from where you will connect to the kubernetes cluster to deploy using the helm chart. -3. For minimum hardware requirement for the host to run SQL Server containers please refer to the system requirements section for SQL on Linux. -4. Requires the following variables to be set or changed in the values.yaml file :
- a. Please ensure that you accept the EULA for SQL Server, by changing the value of ACCEPT_EULA.value=y in values.yaml file or set it during the helm install command --set ACCEPT_EULA.value=Y.
- b. Please do choose the right edition of SQL Server that you would like to install you can change the value of the MSSQL_PID.value in the values file to the edition that you want to install or you can also - change it during the helm install command using the option --set MSSQL_PID.value=Enterprise, If you do not pass the flag and do not change it in the yaml, then by default it is going to install developer edition.
c. Also please do provide your customized value for the sa_password, if you do not provide it then by default the sa_password will the value as shown in the below table.
- -Note: Once you deploy SQL server containers using the chart below, please log into SQL Server using sa account and change the password as mentioned here, this ensures that as DBA you have the control of the sa user and password. - - -## Chart usage: - -On the client machine where you have the Helm tools installed, download the chart on your machine and make the required changes to the values.yaml file as per your requirement. To see the list of settings that can be changed using the values.yaml file please refer to the table below. - -| Configuration parameters | Description | Default_Value | -|----------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------| -| Values.image.repository | The SQL image to be downloaded and used for container deployment. | mcr.microsoft.com/mssql/server | -| Values.image.tag | The tag of the image to be download for the specific SQL image. | 2019-latest | -| Values.ACCEPT_EULA.value | Set the ACCEPT_EULA variable to any value to confirm your acceptance of the SQL Server EULA, please refer environment variable for more details. | Y | -| Values.MSSQL_PID.value | Set the SQL Server edition or product key. please refer environment variable for more details | Developer | -| Values.MSSQL_AGENT_ENABLED.value | Enable SQL Server Agent. For example, 'true' is enabled and 'false' is disabled. By default, agent is disabled. please refer environment variable for more details. | TRUE | -| Values.hostname | The name that you would like to see when you run the select @@servername for the SQL instance running inside the container. | mssqllatest | -| Values.sa_password | Configure the SA user password. | StrongPass1! | -| Values.containers.ports.containerPort | Port on which the SQL Server is listening inside the container. | 1433 | -| Values.podSecurityContext.fsgroup | Security context at the pod level. | 10001 | -| Values.service.type | The type of the service to be created within the kubernetes cluster. | LoadBalancer | -| Values.service.port | The service port number. | 1433 | -| Values.pvc.StorageClass | The storage class to be used by the kubernetes cluster for SQL Server deployment. | azure-disk | -| Values.pvc.userdbaccessMode | The access mode for the pvc (persistance volume claim) to be used by user databases. | ReadWriteOnce | -| Values.pvc.userdbsize | The size to allocate to the persistance volume claim (pvc). | 5Gi | -| Values.pvc.userlogaccessMode | The access mode for the pvc (persistance volume claim) to be used by the log files of the user databases. | ReadWriteOnce | -| Values.pvc.userlogsize | The size to allocate to the persistance volume claim (pvc) used by the log files of the user databases. | 5Gi | -| Values.pvc.tempdbaccessMode | The access mode for the pvc (persistance volume claim) to be used by temp database. | ReadWriteOnce | -| Values.pvc. Tempsize | The size to allocate to the persistance volume claim (pvc) used by the temp database. | 2Gi | -| Values.pvc.mssqldataaccessMode | The access mode for the pvc (persistance volume claim) to be used by system databases. | ReadWriteOnce | -| Values.pvc.mssqldbsize | The size to allocate to the persistance volume claim (pvc) used by the system databases | 2Gi | - - - -## Deployment details: - -> [!NOTE] -> Here are my deployment details, please make changes to the values.yaml or other files as per your requirement. - -In this scenario, I am deploying SQL Server containers on a Azure Kubernetes Service (AKS). You can follow Setup and connect to AKS documentation to read instructions on setup and connections. Also the storage class that I am using here is "Azure-disk". Please do find details below for each of the yaml file used in the template folder of this chart. - -| File Name | Description | -|-|-| -| _helpers.tpl | Template file with all the template definitions that will be used in this chart. | -| deployment.yaml | A manifest file to describing the deployment details for SQL Server. | -| mssqlconfig.yaml | SQL server mssql.conf file and its content that you would like to mount to the SQL Server container. For parameters that you can pass in this file please refer mssql.conf documentation. To modify the mssql.conf settings please modify this file. | -| pvc.yaml | A manifest file that describes the storage class (SC), Persistent volume (PV) and Persistent volume claims (pvc). This will be mounted to the SQL Container and referenced by the deployment.yaml. To make any changes to the sc,pv or pvc please modify this file accordingly. | -| secret.yaml | A manifest file to create secrets to manage the sa_password that will be used to login to the SQL Server container that is deployed. Please modify the value.yaml file to provide your custom sa_password that you will use to login into the SQL Server once deployed. As a security measure please ensure that you change the sa_password once you login to the SQL Server for the first time. | -| service.yaml | A manifest file that defines the kubernetes service type and port. Please modify this for any service modification that is needed. | - -With this information, and probably after you have modified the required files you are now ready to deploy SQL Server using this chart. From the client machine where you have the helm chart installed, change the -directory of the CLI to the directory where you have the chart downloaded and to deploy SQL Server using this chart run the command: - - -``` bash -helm install mssql-latest-deploy . --set ACCEPT_EULA.value=Y --set MSSQL_PID.value=Developer -``` - - -After a few seconds this should deploy the SQL Server containers and you can see all the artifacts using the command : - -```bash -D:\helm-charts\mssql-latest\mssql-latest>kubectl get all -``` - -The output should look as shown below: - -```bash -NAME READY STATUS RESTARTS AGE -pod/mssql-latest-deploy-645c4dddd8-647zk 1/1 Running 4 23h - -NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE -service/kubernetes ClusterIP 10.0.0.1 443/TCP 140d -service/mssql-latest-deploy LoadBalancer 10.0.57.19 20.44.43.212 1433:30544/TCP 23h - -NAME READY UP-TO-DATE AVAILABLE AGE -deployment.apps/mssql-latest-deploy 1/1 1 1 23h - -NAME DESIRED CURRENT READY AGE -replicaset.apps/mssql-latest-deploy-645c4dddd8 1 1 1 23h -``` - -## Connect to SQL Server - -Now you are ready to connect to the SQL Server using any of the familiar tools that you work with, like the [SSMS](https://docs.microsoft.com/en-us/sql/ssms/download-sql-server-management-studio-ssms?view=sql-server-ver15) (SQL Server Management Studio) or [SQLCMD](https://docs.microsoft.com/en-us/sql/tools/sqlcmd-utility?view=sql-server-ver15) or [ADS](https://docs.microsoft.com/en-us/sql/azure-data-studio/download-azure-data-studio?view=sql-server-ver15) (Azure Data Studio), etc. The IP address that you will use to connect is the External-IP address for the mssql-latest-deploy service which in this case is 20.44.43.212 that will be used to connect to SQL Server. - -For more details on the SQL Server deployment on AKS using manual method please refer [Deploy a SQL Server container in Kubernetes with Azure Kubernetes Services (AKS)](https://docs.microsoft.com/en-us/sql/linux/tutorial-sql-server-containers-kubernetes?view=sql-server-ver15). \ No newline at end of file diff --git a/charts/jumdatabase/templates/_helpers.tpl b/charts/jumdatabase/templates/_helpers.tpl deleted file mode 100644 index f4b91c0c..00000000 --- a/charts/jumdatabase/templates/_helpers.tpl +++ /dev/null @@ -1,70 +0,0 @@ -{{/* -Expand the name of the chart. -*/}} -{{- define "mssql-latest.name" -}} -{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }} -{{- end }} - -{{/* -Create a default fully qualified app name. -We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). -If release name contains chart name it will be used as a full name. -*/}} -{{- define "mssql-latest.fullname" -}} -{{- if .Values.fullnameOverride }} -{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }} -{{- else }} -{{- $name := default .Chart.Name .Values.nameOverride }} -{{- if contains $name .Release.Name }} -{{- .Release.Name | trunc 63 | trimSuffix "-" }} -{{- else }} -{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }} -{{- end }} -{{- end }} -{{- end }} - -{{/* -Create chart name and version as used by the chart label. -*/}} -{{- define "mssql-latest.chart" -}} -{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} -{{- end }} - -{{/* -Common labels -*/}} -{{- define "mssql-latest.labels" -}} -helm.sh/chart: {{ include "mssql-latest.chart" . }} -{{ include "mssql-latest.selectorLabels" . }} -{{- if .Chart.AppVersion }} -app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} -{{- end }} -app.kubernetes.io/managed-by: {{ .Release.Service }} -{{- end }} - -{{/* -Selector labels -*/}} -{{- define "mssql-latest.selectorLabels" -}} -app.kubernetes.io/name: {{ include "mssql-latest.name" . }} -app.kubernetes.io/instance: {{ .Release.Name }} -{{- end }} - -{{/* -Create the name of the service account to use -*/}} -{{- define "mssql-latest.serviceAccountName" -}} -{{- if .Values.serviceAccount.create }} -{{- default (include "mssql-latest.fullname" .) .Values.serviceAccount.name }} -{{- else }} -{{- default "default" .Values.serviceAccount.name }} -{{- end }} -{{- end }} - - -{{/* -Create the name for the SA password secret key. -*/}} -{{- define "mssql.sapassword" -}} - sa_password -{{- end -}} diff --git a/charts/jumdatabase/templates/deployment.yaml b/charts/jumdatabase/templates/deployment.yaml deleted file mode 100644 index 920e5e14..00000000 --- a/charts/jumdatabase/templates/deployment.yaml +++ /dev/null @@ -1,72 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - name: {{ include "jum-database.fullname" . }} - labels: - {{- include "jum-database.labels" . | nindent 4 }} -spec: - replicas: {{ .Values.replicas}} - selector: - matchLabels: - {{- include "jum-database.selectorLabels" . | nindent 6 }} - template: - metadata: - {{- with .Values.podAnnotations }} - annotations: - {{- toYaml . | nindent 8 }} - {{- end }} - labels: - {{- include "jum-database.selectorLabels" . | nindent 8 }} - spec: - hostname: {{ .Values.hostname}} - securityContext: - {{- toYaml .Values.podSecurityContext | nindent 8 }} - containers: - - name: {{ .Chart.Name }} - command: - - /bin/bash - - -c - - cp /var/opt/config/mssql.conf /var/opt/mssql/mssql.conf && /opt/mssql/bin/sqlservr - image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}" - imagePullPolicy: {{ .Values.image.pullPolicy }} - ports: - - containerPort: {{ .Values.containers.ports.containerPort}} - env: - - name: MSSQL_PID - value: "{{ .Values.MSSQL_PID.value}}" - - name: ACCEPT_EULA - value: "{{ .Values.ACCEPT_EULA.value | upper}}" - - name: MSSQL_AGENT_ENABLED - value: "{{ .Values.MSSQL_AGENT_ENABLED.value}}" - - name: SA_PASSWORD - valueFrom: - secretKeyRef: - name: mssql-secret - key: {{ template "mssql.sapassword" . }} - volumeMounts: - - name: mssqldb - mountPath: /var/opt/mssql - - name: mssqluserdb - mountPath: /var/opt/mssql/userdata - - name: mssqllog - mountPath: /var/opt/mssql/userlog - - name: mssqltemp - mountPath: /var/opt/mssql/tempdb - - name: mssql-config-volume - mountPath: /var/opt/config - volumes: - - name: mssqldb - persistentVolumeClaim: - claimName: jum-database-data - - name: mssqluserdb - persistentVolumeClaim: - claimName: jum-database-userdb - - name: mssqllog - persistentVolumeClaim: - claimName: jum-database-log - - name: mssqltemp - persistentVolumeClaim: - claimName: jum-database-temp - - name: mssql-config-volume - configMap: - name: jum-database-config \ No newline at end of file diff --git a/charts/jumdatabase/templates/mssqlconfig.yaml b/charts/jumdatabase/templates/mssqlconfig.yaml deleted file mode 100644 index a68f4607..00000000 --- a/charts/jumdatabase/templates/mssqlconfig.yaml +++ /dev/null @@ -1,23 +0,0 @@ -kind: ConfigMap -apiVersion: v1 -metadata: - name: jum-database-config -data: - mssql.conf: | - [EULA] - accepteula = Y - accepteulaml = Y - - [coredump] - captureminiandfull = true - coredumptype = full - - [hadr] - hadrenabled = 1 - - [language] - lcid = 1033 - - [filelocation] - defaultdatadir = /var/opt/mssql/userdata - defaultlogdir = /var/opt/mssql/userlog \ No newline at end of file diff --git a/charts/jumdatabase/templates/pvc.yaml b/charts/jumdatabase/templates/pvc.yaml deleted file mode 100644 index 191745f6..00000000 --- a/charts/jumdatabase/templates/pvc.yaml +++ /dev/null @@ -1,60 +0,0 @@ -kind: PersistentVolumeClaim -apiVersion: storage.k8s.io/v1 -metadata: - name: jum-database-disk -provisioner: kubernetes.io/azure-disk -parameters: - storageaccounttype: Standard_LRS - kind: Managed ---- -kind: PersistentVolumeClaim -apiVersion: v1 -metadata: - name: jum-database-data - annotations: - volume.beta.kubernetes.io/storage-class: {{ .Values.pvc.StorageClass | quote }} -spec: - accessModes: - - {{ .Values.pvc.mssqldataaccessMode | quote}} - resources: - requests: - storage: {{ .Values.pvc.mssqldbsize}} ---- -kind: PersistentVolumeClaim -apiVersion: v1 -metadata: - name: jum-database-userdb - annotations: - volume.beta.kubernetes.io/storage-class: {{ .Values.pvc.StorageClass}} -spec: - accessModes: - - {{ .Values.pvc.userdbaccessMode | quote}} - resources: - requests: - storage: {{ .Values.pvc.userdbsize}} ---- -kind: PersistentVolumeClaim -apiVersion: v1 -metadata: - name: jum-database-log - annotations: - volume.beta.kubernetes.io/storage-class: {{ .Values.pvc.StorageClass}} -spec: - accessModes: - - {{ .Values.pvc.userlogaccessMode | quote}} - resources: - requests: - storage: {{ .Values.pvc.userlogsize}} ---- -kind: PersistentVolumeClaim -apiVersion: v1 -metadata: - name: jum-database-temp - annotations: - volume.beta.kubernetes.io/storage-class: {{ .Values.pvc.StorageClass}} -spec: - accessModes: - - {{ .Values.pvc.tempdbaccessMode | quote}} - resources: - requests: - storage: {{ .Values.pvc.tempsize}} \ No newline at end of file diff --git a/charts/jumdatabase/templates/secret.yaml b/charts/jumdatabase/templates/secret.yaml deleted file mode 100644 index 35339ffc..00000000 --- a/charts/jumdatabase/templates/secret.yaml +++ /dev/null @@ -1,17 +0,0 @@ -{{- if empty .Values.sa_password }} -apiVersion: v1 -kind: Secret -metadata: - name: jum-database-secret - labels: - {{- include "mssql-latest.labels" . | nindent 4 }} -type: Opaque -data: - #sa_password : {{ .Values.sa_password | b64enc | quote}} - # retrieve the secret data using lookup function and when not exists, return an empty dictionary / map as result - {{- $secret := (lookup "v1" "Secret" .Release.Namespace "jum-database-secret") | default dict }} - # set $sa_password to existing secret data or generate a random one when not exists - {{- $sa_password := (get $secretData "jum-database-secret") | default (randAlphaNum 32 | b64enc) }} - # generate 32 chars long random string, base64 encode it and then double-quote the result string. - sa_password: {{ $sa_password | b64enc | quote }} -{{- end }} \ No newline at end of file diff --git a/charts/jumdatabase/templates/service.yaml b/charts/jumdatabase/templates/service.yaml deleted file mode 100644 index 50852aaf..00000000 --- a/charts/jumdatabase/templates/service.yaml +++ /dev/null @@ -1,14 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - name: {{ include "jum-database.fullname" . }} - labels: - {{- include "jum-database.labels" . | nindent 4 }} -spec: - type: {{ .Values.service.type }} - ports: - - port: {{ .Values.service.port }} - targetPort: {{ .Values.service.port }} - protocol: TCP - selector: - {{- include "jum-database.selectorLabels" . | nindent 4 }} \ No newline at end of file diff --git a/charts/jumdatabase/templates/tests/test-connection.yaml b/charts/jumdatabase/templates/tests/test-connection.yaml deleted file mode 100644 index 60261753..00000000 --- a/charts/jumdatabase/templates/tests/test-connection.yaml +++ /dev/null @@ -1,15 +0,0 @@ -apiVersion: v1 -kind: Pod -metadata: - name: "{{ include "jumdatabase.fullname" . }}-test-connection" - labels: - {{- include "jumdatabase.labels" . | nindent 4 }} - annotations: - "helm.sh/hook": test -spec: - containers: - - name: wget - image: busybox - command: ['wget'] - args: ['{{ include "jumdatabase.fullname" . }}:{{ .Values.service.port }}'] - restartPolicy: Never diff --git a/charts/jumdatabase/values.yaml b/charts/jumdatabase/values.yaml deleted file mode 100644 index 6d0c91e7..00000000 --- a/charts/jumdatabase/values.yaml +++ /dev/null @@ -1,43 +0,0 @@ -# Default values for mssql-latest. -# This is a YAML-formatted file. -# Declare variables to be passed into your templates. - -replicas: 1 - -image: - repository: image-registry.openshift-image-registry.svc:5000/e27db1-tools/jum-database - pullPolicy: IfNotPresent - # Overrides the image tag whose default is the chart appVersion. - tag: "develop" - -ACCEPT_EULA: - value: "y" -MSSQL_PID: - value: "Developer" -MSSQL_AGENT_ENABLED: - value: "true" -hostname: justin -sa_password: {} -containers: - ports: - containerPort: 1433 - -podAnnotations: {} - -podSecurityContext: {} - -service: - type: ClusterIP - port: 1433 - -pvc: - StorageClass: "netapp-file-standard" - userdbaccessMode: ReadWriteOnce - userdbsize: 5Gi - userlogaccessMode: ReadWriteOnce - userlogsize: 5Gi - tempdbaccessMode: ReadWriteOnce - tempsize: 2Gi - mssqldataaccessMode: ReadWriteOnce - mssqldbsize: 2Gi - diff --git a/charts/pidp/.helmignore b/charts/pidp/.helmignore deleted file mode 100644 index 0e8a0eb3..00000000 --- a/charts/pidp/.helmignore +++ /dev/null @@ -1,23 +0,0 @@ -# Patterns to ignore when building packages. -# This supports shell glob matching, relative path matching, and -# negation (prefixed with !). Only one pattern per line. -.DS_Store -# Common VCS dirs -.git/ -.gitignore -.bzr/ -.bzrignore -.hg/ -.hgignore -.svn/ -# Common backup files -*.swp -*.bak -*.tmp -*.orig -*~ -# Various IDEs -.project -.idea/ -*.tmproj -.vscode/ diff --git a/charts/pidp/Chart.lock b/charts/pidp/Chart.lock deleted file mode 100644 index b0b934ec..00000000 --- a/charts/pidp/Chart.lock +++ /dev/null @@ -1,36 +0,0 @@ -dependencies: -- name: frontend - repository: file://../frontend - version: 0.1.5 -- name: admin-frontend - repository: file://../admin-frontend - version: 0.2.0 -- name: webapi - repository: file://../webapi - version: 0.3.0 -- name: edt-service - repository: file://../edt-service - version: 0.3.0 -- name: diam-config - repository: file://../diam-config - version: 0.1.0 -- name: edt-casemgmt - repository: file://../edt-casemgmt - version: 0.3.0 -- name: edt-disclosure - repository: file://../edt-disclosure - version: 0.9.0 -- name: approvalflow - repository: file://../approvalflow - version: 0.2.0 -- name: jum-backend - repository: file://../jum-backend - version: 0.2.0 -- name: jum-notification - repository: file://../jum-notification - version: 0.2.0 -- name: nginx - repository: file://../nginx - version: 9.7.3 -digest: sha256:c5b3cb8b3d5ca05c69b7b5d1312192a60a1d1ebbda7967ebde91fcf0589bb164 -generated: "2024-03-12T10:19:20.6372069-07:00" diff --git a/charts/pidp/Chart.yaml b/charts/pidp/Chart.yaml deleted file mode 100644 index c5c400c4..00000000 --- a/charts/pidp/Chart.yaml +++ /dev/null @@ -1,68 +0,0 @@ -apiVersion: v2 -name: pidp -description: A Helm chart for Kubernetes - -# A chart can be either an 'application' or a 'library' chart. -# -# Application charts are a collection of templates that can be packaged into versioned archives -# to be deployed. -# -# Library charts provide useful utilities or functions for the chart developer. They're included as -# a dependency of application charts to inject those utilities and functions into the rendering -# pipeline. Library charts do not define any templates and therefore cannot be deployed. -type: application - -# This is the chart version. This version number should be incremented each time you make changes -# to the chart and its templates, including the app version. -# Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 0.1.5 - -# This is the version number of the application being deployed. This version number should be -# incremented each time you make changes to the application. Versions are not expected to -# follow Semantic Versioning. They should reflect the version the application is using. -# It is recommended to use it with quotes. -appVersion: "1.0.6" - -icon: https://drive.google.com/uc?export=view&id=1fc37O4LI_ciUI87_Y00lFgO8CaUv_7ci - - -# These are the dependent services for pidp - -dependencies: -# - name: postgresql -# repository: https://charts.bitnami.com/bitnami -# version: 11.1.3 -# condition: postgresql.enabled - - name: frontend - repository: "file://../frontend" - version: "0.1.5" - - name: admin-frontend - repository: "file://../admin-frontend" - version: "0.2.0" - - name: webapi - repository: "file://../webapi" - version: "0.3.0" - - name: edt-service - repository: "file://../edt-service" - version: "0.3.0" - - name: diam-config - repository: "file://../diam-config" - version: "0.1.0" - - name: edt-casemgmt - repository: "file://../edt-casemgmt" - version: "0.3.0" - - name: edt-disclosure - repository: "file://../edt-disclosure" - version: "0.9.0" - - name: approvalflow - repository: "file://../approvalflow" - version: "0.2.0" - - name: jum-backend - repository: "file://../jum-backend" - version: "0.2.0" - - name: jum-notification - repository: "file://../jum-notification" - version: "0.2.0" - - name: nginx - repository: "file://../nginx" - version: "9.7.3" \ No newline at end of file diff --git a/charts/pidp/charts/admin-frontend-0.2.0.tgz b/charts/pidp/charts/admin-frontend-0.2.0.tgz deleted file mode 100644 index fb060d863335ebd5e952a91429aca757789c8e3d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4937 zcmV-P6SnLhiwG0|00000|0w_~VMtOiV@ORlOnEsqVl!4SWK%V1T2nbTPgYhoO;>Dc zVQyr3R8em|NM&qo0PK8ibK5wQ@O)O4{zE^Ex5k-gNJ)-ga;(a2d2H{jYZ6CgC)wJX zoy$OEOF~Q%8~~K9Rdm1o3IN|av7`2I1Z>s6pr4aK)>e02NPZ2+jb<8iHlX=}QaFwMH6t4{ z|G3VguDwDp;Z!b9)P%j21@lw!BWFqM!rpK=Gy?B{^hiu5G@z2ANXG%d=Pb@2Y&d@T z(mZe^{_7}MUNR>CMgtT}Au)7yFH?vlIu;i!QV@;$w*t8fqnsrzP))};7AHX>B=YmI zUU`g57oHEFYhW79IErj;E4Ad8#@h>s5Er?`T1QlIah>}&4rPNBr=wfD5Y1?G+YTuM zVG~cIS6$L1=1fSDE+bn%wJH%iRZ*K(lR*R!6FJY&8q})Bg+WnefZk}4oriINYL)BG zrYp$PA`MavqDRpNp|y$;l2%AI-V)W?mVwB|y40&D8T|^d6EKeiMzac*a1VtG3Ot}8 z&E?_6i3@uNp?L~1)GGGi@D(*`_qPN^6?inP11s2mk0g=_j|4QDb&P#Tqf4XYg;wwY zA-OGT4venlGn6Oew{Im4=)bkB#>hP-w;8HgRzSVd4BP?O??ueVD-6(+jAyG+vOq0t zGvk!l`#mz9Qe_AY$b;Dbn*Wzu=)uM7H)mIlyp>;0W0U{4KRl@Ue+LIghmZc>LzIyN zKcduDrL;?fx0f$rvQ$bqN{x;{?Ua$oSIcmuEuJmXzkQn%Rm8%)e10DB;CPawKBvsW>~LRD}${>!@wH$ zD!&7Pij2o1NoXX%x?nzz8JAYhcWQtfWqeYUc&p3~T)aL#dp~}C`R2vWuCfH43}A*5 zY+IRS5fcwVF>{Fl5`oS|Ub|j{&ESJzkz(|PwQ@v^o};jepNGFVQOd>I${Y%zFww{h z5+A{;E?_5f4J>eAy?$C}@qAokP@xx}#U_;)Y7T`YG7%2(eKjno>(Ym{WjOHWOpl~H z80@5cxI4Mbx(47SBmNI0Ad!ds&OrbGrLJ5!mk^RANOFxpV2U?N*(WmH)~HEd#tG-+ zbf-cVga&HrI%T5?|6~bxB!U|vy}9w}bYGQ+S6Ut4e)5Qmg$MS{_T%_%X&kT4F5jJ> zv<#(2x()TM$%1WX1_7+q%37_`CAv!^A8#QW`k*A#Yv zEZ2rv_qltK<{scSt91PO^!>&0tFxNmV&-qV1Ol)~96MEKPc?jThfoWFe&1|NBO#UG zUet*yd3CP25GC=6BpP=nRMW|m*B5V&&o9m{+w@V){Ox+WlgX-8JEihRu9?YoRbFir zRx#ApJ1VHmMtrn)aQ|rk(f@mhvRVzk>-WxXV-oq=!j&T! zdL!rbd*2N*1?=OLMqL`tEXLv7dPM0Q!9pyZVVKTO zDF(g(!qMzeF^vRK0lSl>7R>3zm4a2qU+KfAPQQ0P1#Xm*!IGOO6U#H<90@lx2$aW> z2*s&TUP=-K8NV9^UD)Sb*d;f-9_Y(u*a@)J04SrIJ?!X?xG%OJ;}V~_ObnK~xl4Ji z)P6F9F{hE7g7p_+|3z3eY=-Wq%(|}Mwb@u2WVMjeLoPMIdZ5#3W1s>u!C;%g*5IX) zu6M00dGk9B7sE&37zfHMTL0ey>%H}PD~*LAiwwVF3w{k?%J3Y6&=K>2?u2`n&zW}9 zN%`o66KMeDWlF{=Ppwn{$9c$Hzihf&`SGLjA{uQz!fy$a*pNsQPe>v%L*Je(-HJnU zl?HvgWST{RwwG$X+jcucCj7gV7uwc5b3@&Rd$nom*NsMd*n6vvmP7m(om#F6=cJ+Y zy6xHBVvF;%3ujd6cUiq;=&kfeW82Y=qD6yzZOd;;r~l`%Xi8^xNa8O(4c_4Y?HwH+ z)%?Gs;o-AK|L-A+w&?<6!imyK?h62kJR*FlO@rlFu*-3Vx36>z#M=F<`>%gF&Ub%( zy4qhCli!@>I{7*7(_-cB_$(weD#!oo&?R8CIxkWeW1ApF+7fm$=Sz`kQD3mbyt8Pb zUhD4sjYd9LyFdSz{mXYdPp$SHrD;gT_)@i-6EWtfjb_a4x@)1JpFDw6(nUGhaGH#J5idR5u!wP-W-vW~?o@kQspGwNwIFiDA2qXok*7cu?V4 zH`K@T8=GpVX5;J>e`EU$P@yO=tV`G|8d3RLC!dK%?^yJb5lzLLqjzl!!OCc|pXrZv zIhmnz`sE$};beSOo(qYb+seWtx0C8*@NwaI+EZ2>I3E%rsfV?!hY~6w0-NJ+3FWAn z$6Kuuf)Yq}QmS5`o*%!m6*u8taL5>%W_0_xdDik3M$FW%}Yp;jR!fvqN!<-#x* zMXvul?Z1z4z?OQg{=W8qG(0#utlR&+z2T$%e~41H7bK3wKp72VRZjC6@P{xXB1X^6 zPVuNopUHGf>CnG&2B|Z)(sTWiDk|rAwHyrsWP7fZ;ZXTLFUwuHyA#cwYSEd)lti}D zG7@D0t5Qx#DYRP5S%`9uiQcpckCPZ(_*O0bZ@ZvOUX1m8_j|;VXappwKsmFM% zRM>#bFp@TnKA)wZ=2j7TN|HaJ-JV`nc2u;t8b*h4!)vv_~bgmWBq=)P8VMp&boKqr+ zqZW4q7t4jg7{V z{gZ@2McF=wD!M|$s}fW-`seHPf=q6tT02lr*e&tW$mRXQzBPksZA-VTGhn^8^?WZ- zR5L)^IV#4cmRs7v>VgGHh}DF}wyPtynWN=p;APuflR#LM&u~cYB#qJH6XF5)iZY~te%;O&%5g|yT1vQDuMgVEw|oP~{1Fb>cq zP8&0)TY;tipXjt?<%H(al&Iu6f1w4-lc7ud8sz{;dfa@YRxM7EbM#LWPNUhCH%C8F z8^ZHh#PaI1Tl5lrm$5FU8>F+jOcTP(MG;L2zCm7>uPTzoEMT+cPq=hz_Wyimu6CVgw=qW{YTLjn>(`2I`-xzC695*Y4*0up-k921F&Dx*s2a*!9yfjx z+u2Fv@5s8{e#mKFHs*RMQNILMPT&9Rnf|q-KX=6c<}taiYoHs>|3*j6{Qtw@cVcsBA)vFMcSPc@e?i^giA*- zVBK*O*ec`Pd9OMuP<}qTZV7C@#zv>mCZGSs<(04 z2=3o6!PLvhsWuwnt;9%glWNeZY>XK{Hv;YQM~X>)Z(c`R6u4zR7|`aKU&nr8zva}j zem=TkDSg>0O6jL~Pm0_0<;Y!wXxmY1hXOK}JNxOi^g}q{|QQ>IW+ifj7M`ZsCCt+;IoW0b!} zQ7xVNq*`=@wk<>vCE*0Q!H^lxCW1<8aw}^W+whUXnsE3Q6dRIn^TPkQ`Oc4}S~~sz z%tibC{r}yU`u`76>iNRPPfBmG{ITLTGPe!g7ro2Jfp&TZcGsnHqr%J% zeB3xOYds09o-Nig#XdKKVE=2W$W7}%y~XoIYGBj)KX_K#|L+Zl`;Yg3AEaz`x2mz* zYG{h%?AvIcrZC#BeBGn!XxV(#I(W}}us@%_)4Bd73Tgh@9*ZLMlt?~L4Q#ak&uaI- z_D0V}kMX|;DebFz%>34+Y;A4)?b^(-?rljo7pRrpHJ&qeZMk4R<(c~pjV!DzA>(F- zd9quY6g5f2a>8!=c>l~?r&LcOUtx%FX1+1E8|&MY=o<_D z|DHPVItrG+BHdIm1u=36XoOC`=bT=>zmkljLXv)(;N8g;_>_x&&zVsp@~Zi4p#SC-Vi65W2q(n5PGbFOW6|$@=ZKqF{hN?$^-qTSiE%pX_rCjY)$SeP zlqCYrPtOz=F=rppll`7UeI$dl5oaIzJ!c_2=HuYc;u$=a$MRVIx0nA300960*T(jE H0Av6F+TEiz diff --git a/charts/pidp/charts/approvalflow-0.2.0.tgz b/charts/pidp/charts/approvalflow-0.2.0.tgz deleted file mode 100644 index a120ca1b5d980274bee63046ecbe0579f1650a1f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4817 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 diff --git a/charts/pidp/charts/diam-config-0.1.0.tgz b/charts/pidp/charts/diam-config-0.1.0.tgz deleted file mode 100644 index fef2ec6167de9f6f47f1bc2c8b1556265beaf3fb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4581 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 P00960bbh3W0A2t92)gW3 diff --git a/charts/pidp/charts/edt-casemgmt-0.3.0.tgz b/charts/pidp/charts/edt-casemgmt-0.3.0.tgz deleted file mode 100644 index 53283879cdfe9be96e8fe52195719a0f7c445df6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5248 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 GZ~y?!U~|*} diff --git a/charts/pidp/charts/edt-disclosure-0.9.0.tgz b/charts/pidp/charts/edt-disclosure-0.9.0.tgz deleted file mode 100644 index 2167b2634e1be1a69b4eff8362fd7007a5471e37..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4893 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 diff --git a/charts/pidp/charts/edt-service-0.3.0.tgz b/charts/pidp/charts/edt-service-0.3.0.tgz deleted file mode 100644 index de369b279a2e5971d03668c904c017118e093af2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5527 zcmV;I6=>=oiwG0|00000|0w_~VMtOiV@ORlOnEsqVl!4SWK%V1T2nbTPgYhoO;>Dc zVQyr3R8em|NM&qo0PKBjbKADEa6fCt|6w26XOi>@DamiiWhZyWwcXaIiLJ4fo^z(t z>q6v8LQE1Y0Lsx(bbtFD0DLE9DT(Ve_ZlB8iCpY17QkY$yMWP`wm?3k9(IqXgiB{m z!r+^GExlf^ceuZ=KYP7i{j=A9arjMt|KPBg0jek*=~o#asIRK^beh0$4B9D8cY4`2!6sK1W%0=7&8t(CnMw$ zN)(-lgy=$PKy~CiMi)pN2h<}9L1&gB?>T!;uk)o_|5(cNe@21?#r-RQHS>ReZ+E{w z{}1pk@bvhIX@l3G2;l?3-DMJ zp{G^|5R&T_1Nfuk{PC53>cW#L6Y^Eegq&~`e+1vfjLTOC`+K|JWyoH|)Q|nqcZoo* z+LA+mr$*#0<9`0+i6)cQ`-utZLV?;ado~84+X?ud3Mrlgl^~`p34F!1Bs78>oP(92 zxlVXsIUr*6=y(otilDdvHrC%$WFrjNtz$@N#59^1dAdqs+i;mg5Yh?P%cg*sqfH|r zNe}>ueEmC#C!F}W)hXc85u~P}?}FqBDs1ThIr2O`=nT~>%^*bqw^Ni;5-U>Xh0=Jk@f?C&sm)Ru;J+SYx9F6@h_ra ze#w~pfd(k%LSmS8tAqwpR=R|s_7WB>^Mk-M1D5Vii2_K!pq)E z4NN071!|)y?{6<4LY(IkYwc0R#Z7J+I+S%&oQ|&TLNuY#`*uhf2%C5sy=sysp{Bh^ zwX>~%RdnBGONFTp5ED7gkQs#Pi3{E0kpUWNL7jzhfJz_hCZ_Yo(}E0AO{)9OPA9h! zjW&^Od{0zuTbk8C^>C>z+Zp`|uoEzk1ZJ%eEa4ss7tER#(p(B&oao*S&Cd`+y&&{= zU%sJcmG~n;Q3Zc-P=h|`Dd4RRNhA{<36zd)@AQyHmuBS>des65$@|h1HOkal$0sO{ z2XEg>8qj}hfeny*N_Z1g1I#qrz`fC2+yT1PiI|U97@#K^&!(be0cQG6OMk0F#$&2% z2m|t^ZK|)SlYAY=aN#rY)vRK$a$Kd>8wv3r_PxS^Ymj;BBXo9e#G#SSi@fBdmvDe zNsT%I);aTWz__$>zSD`~s0B1diSO0Y3Fj9lr`Lmv%i*h?r)o9xWB?PCVB5;H5Hax( z6f>6?AQ9-C=TDbQuo=7)EK-cVvKEdq9UX;L{M!4?iBc|>R%R3lg^5O9koZ{HFgclR zV}S$9<+D0}XM-Ad3b*(q9;w7ovnM2xiExPTt3E;fEd8;x327qp-JO&VcPAIv zD(Syw#Q&ZIB=V5o*#iKe)RhZo5<)TuNp27bjPX`2T8T{ev}%Nxal+Xk-Kdfop@AB= zPI>)@f3XBS62UEz-qaYSx~h|OHB393~irNT$9naTB2{@5s~qMxl_sGu_I z?*8rzr|0yXzN3+`mg-Yv=w)HdKH{x0GVUHQVCEPDHKoN0ws$!|?{4c%m{zXc= z{dYaZAVw}68Q+5|c%A)suvhp09=v$*;?e$lh_YC8zuoGbzK==dH=I>^Tk33ezU^k3 z*vB!AT2-B00@40t$AlBLTFZ2F*|!KEK=LH=;BZfWrQuaF9@F<=*;d0sQ@<3W$Hvz~ zaw=-&n!_In3Fw%juat>yg0t262O0vpf>dNwdjyQoBTD%Q7Gf!WWm-O_82ADRN3-3= z)RjdAJRKQ#-pTouf>n#ZQjE`>t*M?%Lht(8H1DvXNbuXu5#y|yRgu&XL*07~+uD7c!cJnO#ZKe%$QV!aIMC$c< zof2@$!zpd|Q68<YTQNnhQaAM~QD&~I z4TV{6v)#^(@m8<5JlpDKrl;F5sn!kjW+bD{MZdm@rzLkM%a!QRBNm3+^MR(TU>fF%Cci|+TDO;UvgYFg~#myWpI=G{Cej2UO z%CN0okgtXxAfl0vk%WDXL7Ad%=H#R%LYfJ^6yB-0Xmu_@8o?>~V9F^9EuK?=Y@JHE z4TUbN&e#h)pn41Za!s+0qch0iYLEJQiQL@#v0<0M8Go=BeHlT}bA z?rFX3z3f>9%uMNhXG+ABdW^@8$HFd|U?goCy+cnnv97KWbF^a?C#pR*i-P%vl@mF& zO;}QW?cTf;_Jjrg-L-Oui3>`AW5&Zw@M05Yv!J1^!-ZM2@a{S$Dru+j$c?JxWI_yG z*zK8!Mbmn0Na(UA3I`^n#`cgukv&KP;KzE_lfDu#*L(7I^Q-? zUi;+i=#A}ZTX`*S-Bs_?;6w@6M=+92lPW78%3kcn;&(L@Z>gMSsVBcLm)8BUYb_SP z7moOR>ZgI9o9D2j7Y^ryNaCnT+yI818(1!1DV}ze#bYQ>RdH8>iS(s~E=6Yp)DtksSwwMz&R2pAN6Te|vuN`tn#clQ$&3t71rKU<;IzMw3s&z)|wK9qUnANwQ?TCdxvX zs`u*nD#7L~U$qJnb0(R`0vCqIgYwIO&M-ou2EhnxG!?BMv93!X%L|<%3FNe!VQ4^U zX4?1_-V{|^ei{x3)pwGH$P#&l9*cb8!a?`Lm`G!j$+CJKTXLj z%9zj~;aCFLD*(3Z!hmj9COk4>E*9y0nc?ZxP)9Tdmlr1`CdESR=_rst$pbe*^!oVSC+HnvtvU#o2z+z=q@^HQ}p??G?K3) zRP(2l_V~{P0ia1Mu<8R}RjUHg9D~mteA5<-;|rY85b9 zEtH&k6-l*s?cL{ea)ocFN5wAFl{V9@*~(i|w&@llPKrl{$k7ZrnP7>~$_8!7Ref1n z+s-@A8GU+F%@L~4ZtW(#{h9d%?fO4EVsSrfz`FDQ{r$TBKkW4%1w)pz{bN1N}zWiS}fW=6w`{n>s?LPkCHW6eDJyeX8@Pw^fX zXTi&k=?2lZERq$f#~kb1N{?3;!blGXu7u7GhSxW_X}$7U!)!~bSgvG&mh07HDaA%o zRV#k4uuH1HcoN|H##DLC&bcdc`aENkQ+>FmV7q>>edVdjLIlP^Q#&VFt)Gpk>_q$> zBWUMihEP$8v-TMy!^-)-mAzuhh*wI+eH)w+(7}Ty3SdyG5B)i*|lB9|J^5 zI6`hPWGiPAK_z9im9_It_()-mD}4is4av6|;$LeX?Elr$ZvPiI%KZ8HzrDTw;Xxz+ zxBqzl|3OM^5iWIn^(_CNnI-(tslT<1-Vu@Bw3O2OcQ*PAhm~E3u-&lB4#`XzyK&1G zJ3X)7>QsldZ;?)>(gmw;a#iomEhc4o^;J2T zlIB-@(e#QMH-nZd(=vec!V4FEed2U+JW3)zz$ee)iEYo2kC?zG&!5ny0ithO0{QUG-=Lua6FVD_@yt@AT+czces3crw z^XD9A$kjV#k+bpmH4UlM5%%i2vM;^pJ(j$*+ka-_J&^ymf3UaL@c;G>AML+~D3$x4 za}&rUpni@ORMpBRwsH}ZKN2+efu{H0ag?0m49j<8>bzxhVPnA9O%lU6iOl7oB=X^Q zijnr*W*2gD)X7UE0t{n02cK$SWdn90Bry=76jc()!c^KZv@S;Pl*#xsrDM(d7Fee7 ztrn|QZkF||WN9d(m5p#p;jKWfNlZ|dsaolpv=Nd)dU5G0MA?$tKvrbjZfmdf&bwP_ zng^2Q7mrp1&v<@qCJ^8x@>vKh!n)i`OeO+(inYdI&iG0$pDGGRK|CerNeFwp@Bv1L z`xtr8s)ESwZry-RL#$OA{lgj!L#4!^@rKkW)}3!DAp={IKmqrqr}jo=mHs!A`a$%6 z@37Z$|I1_k$Agqr`aiu=`md3mG>bt(msl;}gUU=8NV#a_qLHI!ZLKdyvvTs|U<) zoyyjRyT97VxfgeJ+XS`B4sy!{^G`N%yP@Ho&OC0n6O`Gip8BLmiI|Vr`@*rEyM7gL z;j$%sBGl8(Byq>prUqrZ2kqhdzdZjPB~3bs7{`01v3C7GZ2teB$NayCDcdk0QX)71 zxx;k6+3JrH8u&DtKuo+FGSUCGC;fjwB8j!R4PuHx0F!`?%q1{1nmh-N0g-fuI<2Gh zoJ79D5aGn!G5$2x!9MiOI{p8iIdBmLbM0)14O0*!hk!=tY;~NItLxMsz76Reb-x^6 zfls;E>NpcByXM0*Vyokf{>{7QBY!lVboJl-ftW?z62cMjw8M!8D7HG^I^s4~A0u+3 zKD7V-TZeHv+3I}z->Tj(gj1FXI6FC2T*REcLr-pX9O@(KrjX0Ga>* diff --git a/charts/pidp/charts/frontend-0.1.5.tgz b/charts/pidp/charts/frontend-0.1.5.tgz deleted file mode 100644 index 7fb212d673fb272e45f988eed536dbb7e51c6d40..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4685 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 P00960PD;BT0Ac_DDqcrg diff --git a/charts/pidp/charts/jum-backend-0.2.0.tgz b/charts/pidp/charts/jum-backend-0.2.0.tgz deleted file mode 100644 index 59db708c2c7380b399be096553358dd594008105..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5317 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 X=ki?s@0I@z00960zNRZ90CWHVc}R{@ diff --git a/charts/pidp/charts/jum-notification-0.2.0.tgz b/charts/pidp/charts/jum-notification-0.2.0.tgz deleted file mode 100644 index 0102ca5c6f21d9a7af8455412fc5a5013662b875..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5089 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

OA5sO|+M;wfHo%yBYT~1^~LYSHHHE^S{Sa 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 diff --git a/charts/pidp/charts/webapi-0.3.0.tgz b/charts/pidp/charts/webapi-0.3.0.tgz deleted file mode 100644 index 2810693627b68163a455cd5b680fec8dad874754..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5212 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 WmdEn1R{k#l0RR7yQm8!uZU6u$t!W - createdb -O $(APPUSER) $(PGDATABASE) 2> /dev/null || echo "database already exists" - env: - - name: PGHOST - value:postgresql - - name: PGUSER - valueFrom: - secretKeyRef: - name: postgresql - key: database-user - - name: APPUSER - valueFrom: - secretKeyRef: - name: postgresql - key: database-user - - name: PGPASSWORD - valueFrom: - secretKeyRef: - name: postgresql - key: database-password - - name: PGDATABASE - {{- if $isPR }} - value: "pidp_{{ $drn }}" - {{ else }} - valueFrom: - secretKeyRef: - name: postgresql - key: database-name - {{- end }} - restartPolicy: Never - backoffLimit: 3 -{{- end }} diff --git a/charts/pidp/templates/dropdb-job.yaml b/charts/pidp/templates/dropdb-job.yaml deleted file mode 100644 index 5e459108..00000000 --- a/charts/pidp/templates/dropdb-job.yaml +++ /dev/null @@ -1,53 +0,0 @@ -{{- if hasPrefix "pr-" .Release.Name }} -{{ $release := .Release.Name }} -{{ $ocEnv := regexFind "([^-]*$)" .Release.Namespace }} -{{ $isPR := hasPrefix "pr-" .Release.Name }} -## Derived release name -{{ $drn := ternary $release $ocEnv $isPR }} -# -apiVersion: batch/v1 -kind: Job -metadata: - name: {{ include "pidp.fullname" . }}-dropdb - annotations: - helm.sh/hook: post-delete - helm.sh/hook-delete-policy: hook-succeeded - labels: - {{- include "pidp.labels" . | nindent 4 }} -spec: - template: - spec: - containers: - - name: dropdb - image: {{ .Values.global.image.registry }}/{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }} - imagePullPolicy: Always - command: - - /bin/bash - - -c - - > - dropdb $(PGDATABASE) - env: - - name: PGHOST - value:postgresql - - name: PGUSER - valueFrom: - secretKeyRef: - name: postgresql - key: database-user - - name: APPUSER - valueFrom: - secretKeyRef: - name: postgresql - key: database-user - - name: PGPASSWORD - valueFrom: - secretKeyRef: - name: postgresql - key: database-password - - name: PGDATABASE - secretKeyRef: - name: postgresql - key: database-name - restartPolicy: Never - backoffLimit: 3 -{{- end }} diff --git a/charts/pidp/templates/ingress.yaml b/charts/pidp/templates/ingress.yaml deleted file mode 100644 index 3ff9d26f..00000000 --- a/charts/pidp/templates/ingress.yaml +++ /dev/null @@ -1,64 +0,0 @@ -{{- if .Values.ingress.enabled -}} -{{- $separator := ternary "-" "." (regexMatch "(?:\\..*?){4}" .Values.global.vanityURL) -}} -{{- $fullName := include "pidp.fullname" . -}} -{{ $release := .Release.Name }} -{{ $ocEnv := regexFind "([^-]*$)" .Release.Namespace }} -{{ $isPR := hasPrefix "pr-" .Release.Name }} -## Derived release name -{{ $drn := ternary $release $ocEnv $isPR }} -{{ $isProd := contains "prod" $ocEnv }} -{{- $svcPort := .Values.service.port -}} -{{- if and .Values.ingress.className (not (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion)) }} - {{- if not (hasKey .Values.ingress.annotations "kubernetes.io/ingress.class") }} - {{- $_ := set .Values.ingress.annotations "kubernetes.io/ingress.class" .Values.ingress.className}} - {{- end }} -{{- end }} -{{- if semverCompare ">=1.19-0" .Capabilities.KubeVersion.GitVersion -}} -apiVersion: networking.k8s.io/v1 -{{- else if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion -}} -apiVersion: networking.k8s.io/v1beta1 -{{- else -}} -apiVersion: extensions/v1beta1 -{{- end }} -kind: Ingress -metadata: - name: {{ $fullName }} - labels: - {{- include "pidp.labels" . | nindent 4 }} - {{- with .Values.ingress.annotations }} - annotations: - {{- toYaml . | nindent 4 }} - {{- end }} -spec: - {{- if and .Values.ingress.className (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion) }} - ingressClassName: {{ .Values.ingress.className }} - {{- end }} - {{- if .Values.ingress.tls }} - tls: - {{- range .Values.ingress.tls }} - - hosts: - {{- range .hosts }} - - {{ . | quote }} - {{- end }} - secretName: {{ .secretName }} - {{- end }} - {{- end }} - rules: - - host: {{ .Values.global.vanityURL }} - http: - paths: - - path: '' - {{- if (semverCompare ">=1.18-0" $.Capabilities.KubeVersion.GitVersion) }} - pathType: ImplementationSpecific - {{- end }} - backend: - {{- if semverCompare ">=1.19-0" $.Capabilities.KubeVersion.GitVersion }} - service: - name: {{ $release }}-ingress - port: - number: 8443 - {{- else }} - serviceName: {{ $release }}-ingress - servicePort: 8443 - {{- end }} -{{- end }} diff --git a/charts/pidp/templates/route.yaml b/charts/pidp/templates/route.yaml deleted file mode 100644 index 283dfdc9..00000000 --- a/charts/pidp/templates/route.yaml +++ /dev/null @@ -1,19 +0,0 @@ -{{- if .Values.route.enabled -}} -kind: Route -apiVersion: route.openshift.io/v1 -metadata: - name: {{ include "pidp.fullname" . }}-route - namespace: {{ .Values.global.licenseplate }}-{{ .Values.global.environment }} -spec: - host: {{ include "pidp.fullname" . }}-{{ .Values.global.licenseplate }}-{{ .Values.global.environment }}.apps.gold.devops.gov.bc.ca - to: - kind: Service - name: {{ include "pidp.fullname" . }} - weight: 100 - port: - targetPort: https - tls: - termination: edge - insecureEdgeTerminationPolicy: None - wildcardPolicy: None -{{- end }} diff --git a/charts/pidp/templates/serviceaccount.yaml b/charts/pidp/templates/serviceaccount.yaml deleted file mode 100644 index 6f58fe4b..00000000 --- a/charts/pidp/templates/serviceaccount.yaml +++ /dev/null @@ -1,12 +0,0 @@ -{{- if .Values.serviceAccount.create -}} -apiVersion: v1 -kind: ServiceAccount -metadata: - name: {{ include "pidp.serviceAccountName" . }} - labels: - {{- include "pidp.labels" . | nindent 4 }} - {{- with .Values.serviceAccount.annotations }} - annotations: - {{- toYaml . | nindent 4 }} - {{- end }} -{{- end }} diff --git a/charts/pidp/templates/tests/test-connection.yaml b/charts/pidp/templates/tests/test-connection.yaml deleted file mode 100644 index 954e569e..00000000 --- a/charts/pidp/templates/tests/test-connection.yaml +++ /dev/null @@ -1,15 +0,0 @@ -apiVersion: v1 -kind: Pod -metadata: - name: "{{ include "pidp.fullname" . }}-test-connection" - labels: - {{- include "pidp.labels" . | nindent 4 }} - annotations: - "helm.sh/hook": test -spec: - containers: - - name: wget - image: busybox - command: ['wget'] - args: ['{{ include "pidp.fullname" . }}:{{ .Values.service.port }}'] - restartPolicy: Never diff --git a/charts/pidp/values.yaml b/charts/pidp/values.yaml deleted file mode 100644 index ba4aa7da..00000000 --- a/charts/pidp/values.yaml +++ /dev/null @@ -1,265 +0,0 @@ -# Default values for pidp. -# This is a YAML-formatted file. -# Declare variables to be passed into your templates. - -global: - vanityURL: "pidp-e27db1-dev.apps.gold.devops.gov.bc.ca" - commit_sha: "" - image: - registry: image-registry.openshift-image-registry.svc:5000/e27db1-tools - tag: latest - -# used for creating/dropping databases -image: - repository: postgresql - pullPolicy: Always - # Overrides the image tag whose default is the chart appVersion. - tag: 12 - -replicaCount: 1 - -database: - autoCreate: false - -nginx: - nameOverride: ingress - image: - registry: public.ecr.aws - - containerPorts: - http: 8080 - https: 8443 - mtls: 8543 - - metrics: - enabled: true - image: - registry: public.ecr.aws - - service: - type: ClusterIP - port: 8080 - httpsPort: 8443 - mtlsPort: 8543 - - # mounting certificates - extraVolumes: - - name: tls-certs - secret: - secretName: demsidentityportal-tls - - name: plr-integration - secret: - secretName: plr-integration - - extraVolumeMounts: - - name: tls-certs - readOnly: true - mountPath: /opt/bitnami/nginx/conf/certs - - name: plr-integration - readOnly: true - mountPath: /opt/bitnami/nginx/conf/certs/plr - - serverBlock: |- - server { - listen 8080; - server_name localhost *.gov.bc.ca; - - location / { - proxy_pass http://{{ .Release.Name }}-frontend:8080/; - } - - location ^~ /api/v1/ { - proxy_pass http://{{ .Release.Name }}-webapi:8080/api/; - } - - location ^~ /api/config/ { - proxy_pass http://diam-config:8080/api/config/; - } - - location ^~ /api/v1/PLRHL7 { - proxy_pass http://{{ .Release.Name }}-webapi:8080/api/PLRHL7; - proxy_set_header X-SSL-CERT $ssl_client_escaped_cert; - } - - # Deny all attempts to access hidden files such as .htaccess or .htpasswd - location ~ /\. { - deny all; - } - - # required for metrics exporter - location /status { - stub_status on; - access_log off; - allow 127.0.0.1; - deny all; - } - } - - server { - listen 8443 ssl; - server_name localhost *.gov.bc.ca; - ssl_certificate certs/tls.crt; - ssl_certificate_key certs/tls.key; - ssl_verify_client optional_no_ca; - ssl_client_certificate certs/plr/trusted-ca-certs.pem; - - set $CSP_style "style-src 'self' 'unsafe-inline' *.googleapis.com *.gstatic.com https://cdn.jsdelivr.net/npm/bootstrap@4.5.3/dist/css/bootstrap.min.css"; - set $CSP_font "font-src 'self' data: *.googleapis.com *.gstatic.com"; - set $CSP_frame "frame-ancestors 'self' *.oidc.gov.bc.ca oidc.gov.bc.ca"; - set $CSP_SCRIPT "script-src 'self' 'unsafe-inline' https://code.jquery.com/jquery-3.6.0.min.js"; - set $CSP "default-src 'self' 'unsafe-inline' *.gov.bc.ca ; ${CSP_style} ; ${CSP_font} ; ${CSP_SCRIPT} ; ${CSP_frame}"; - - add_header Content-Security-Policy $CSP; - add_header X-Frame-Options "ALLOW-FROM dev.oidc.gov.bc.ca oidc.gov.bc.ca" always; - add_header X-XSS-Protection "1; mode=block" always; - add_header Strict-Transport-Security "max-age=31536000; includeSubdomains; preload" always; - add_header X-Content-Type-Options "nosniff" always; - add_header Referrer-Policy "no-referrer-when-downgrade"; - - location / { - proxy_pass http://{{ .Release.Name }}-frontend:8080/; - } - - location ^~ /api/v1/ { - proxy_pass http://{{ .Release.Name }}-webapi:8080/api/; - } - - location ^~ /api/config/ { - proxy_pass http://diam-config:8080/api/config/; - } - - #location ^~ /api/v1/PLRHL7 { - # proxy_pass http://{{ .Release.Name }}-webapi:8080/api/PLRHL7; - # proxy_set_header X-SSL-CERT $ssl_client_escaped_cert; - #} - - # Deny all attempts to access hidden files such as .htaccess or .htpasswd - location ~ /\. { - deny all; - } - - # required for metrics exporter - location /status { - stub_status on; - access_log off; - allow 127.0.0.1; - deny all; - } - } - - server { - listen 8543 ssl; - server_name localhost *.gov.bc.ca; - ssl_certificate certs/tls.crt; - ssl_certificate_key certs/tls.key; - ssl_verify_client optional_no_ca; - ssl_client_certificate certs/plr/trusted-ca-certs.pem; - - set $CSP_style "style-src 'self' 'unsafe-inline' *.googleapis.com *.gstatic.com; "; - set $CSP_font "font-src 'self' data: *.googleapis.com *.gstatic.com; "; - set $CSP_frame "frame-ancestors 'self' *.oidc.gov.bc.ca oidc.gov.bc.ca *.apps.silver.devops.gov.bc.ca sso-dev-5b7aa5-dev.apps.silver.devops.gov.bc.ca"; - set $CSP "default-src 'self' ; ${CSP_style} ${CSP_font} ${CSP_frame}"; - - add_header Content-Security-Policy $CSP; - add_header X-Frame-Options "ALLOW-FROM dev.oidc.gov.bc.ca oidc.gov.bc.ca sso-dev-5b7aa5-dev.apps.silver.devops.gov.bc.ca" always; - add_header X-XSS-Protection "1; mode=block" always; - add_header Strict-Transport-Security "max-age=31536000; includeSubdomains; preload" always; - add_header X-Content-Type-Options "nosniff" always; - add_header Referrer-Policy "no-referrer-when-downgrade"; - - #location ^~ /api/v1/PLRHL7 { - # proxy_pass http://{{ .Release.Name }}-plr-intake:8080/api/PLRHL7; - # proxy_set_header X-SSL-CERT $ssl_client_escaped_cert; - #} - - # Deny all attempts to access hidden files such as .htaccess or .htpasswd - location ~ /\. { - deny all; - } - - # required for metrics exporter - location /status { - stub_status on; - access_log off; - allow 127.0.0.1; - deny all; - } - } - - -imagePullSecrets: [] -nameOverride: "" -fullnameOverride: "" - -serviceAccount: - # Specifies whether a service account should be created - create: false - # Annotations to add to the service account - annotations: {} - # The name of the service account to use. - # If not set and create is true, a name is generated using the fullname template - name: "" - -podAnnotations: {} - -podSecurityContext: {} - # fsGroup: 2000 - -securityContext: {} - # capabilities: - # drop: - # - ALL - # readOnlyRootFilesystem: true - # runAsNonRoot: true - # runAsUser: 1000 - -service: - type: ClusterIP - port: 80 - -ingress: - enabled: true - className: "" - annotations: - route.openshift.io/termination: "passthrough" - tls: {} - -resources: {} - # We usually recommend not to specify default resources and to leave this as a conscious - # choice for the user. This also increases chances charts run on environments with little - # resources, such as Minikube. If you do want to specify resources, uncomment the following - # lines, adjust them as necessary, and remove the curly braces after 'resources:'. - # limits: - # cpu: 100m - # memory: 128Mi - # requests: - # cpu: 100m - # memory: 128Mi - -autoscaling: - enabled: false - minReplicas: 1 - maxReplicas: 100 - targetCPUUtilizationPercentage: 80 - # targetMemoryUtilizationPercentage: 80 - -nodeSelector: {} - -tolerations: [] - -affinity: {} - - -postgresql: - enabled: true - auth: - username: postgres - password: postgres - database: postgres - primary: - podSecurityContext: - enabled: false - containerSecurityContext: - enabled: false - persistence: - size: 1Gi diff --git a/charts/plr-intake/.helmignore b/charts/plr-intake/.helmignore deleted file mode 100644 index 0e8a0eb3..00000000 --- a/charts/plr-intake/.helmignore +++ /dev/null @@ -1,23 +0,0 @@ -# Patterns to ignore when building packages. -# This supports shell glob matching, relative path matching, and -# negation (prefixed with !). Only one pattern per line. -.DS_Store -# Common VCS dirs -.git/ -.gitignore -.bzr/ -.bzrignore -.hg/ -.hgignore -.svn/ -# Common backup files -*.swp -*.bak -*.tmp -*.orig -*~ -# Various IDEs -.project -.idea/ -*.tmproj -.vscode/ diff --git a/charts/plr-intake/Chart.lock b/charts/plr-intake/Chart.lock deleted file mode 100644 index c402617e..00000000 --- a/charts/plr-intake/Chart.lock +++ /dev/null @@ -1,6 +0,0 @@ -dependencies: -- name: postgresql - repository: file://../postgresql - version: 12.0.0 -digest: sha256:eedd4baf6282d02607a3284c5e19367fafc9029baa54a6da3240f49a5e99c397 -generated: "2022-11-01T16:37:02.1514375-07:00" diff --git a/charts/plr-intake/Chart.yaml b/charts/plr-intake/Chart.yaml deleted file mode 100644 index 8a68eb9b..00000000 --- a/charts/plr-intake/Chart.yaml +++ /dev/null @@ -1,24 +0,0 @@ -apiVersion: v2 -name: plr-intake -description: A Helm chart for Kubernetes - -# A chart can be either an 'application' or a 'library' chart. -# -# Application charts are a collection of templates that can be packaged into versioned archives -# to be deployed. -# -# Library charts provide useful utilities or functions for the chart developer. They're included as -# a dependency of application charts to inject those utilities and functions into the rendering -# pipeline. Library charts do not define any templates and therefore cannot be deployed. -type: application - -# This is the chart version. This version number should be incremented each time you make changes -# to the chart and its templates, including the app version. -# Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 0.1.2 - -# This is the version number of the application being deployed. This version number should be -# incremented each time you make changes to the application. Versions are not expected to -# follow Semantic Versioning. They should reflect the version the application is using. -# It is recommended to use it with quotes. -appVersion: "1.16.0" diff --git a/charts/plr-intake/templates/NOTES.txt b/charts/plr-intake/templates/NOTES.txt deleted file mode 100644 index 72620cf3..00000000 --- a/charts/plr-intake/templates/NOTES.txt +++ /dev/null @@ -1,22 +0,0 @@ -1. Get the application URL by running these commands: -{{- if .Values.ingress.enabled }} -{{- range $host := .Values.ingress.hosts }} - {{- range .paths }} - http{{ if $.Values.ingress.tls }}s{{ end }}://{{ $host.host }}{{ .path }} - {{- end }} -{{- end }} -{{- else if contains "NodePort" .Values.service.type }} - export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "plr-intake.fullname" . }}) - export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}") - echo http://$NODE_IP:$NODE_PORT -{{- else if contains "LoadBalancer" .Values.service.type }} - NOTE: It may take a few minutes for the LoadBalancer IP to be available. - You can watch the status of by running 'kubectl get --namespace {{ .Release.Namespace }} svc -w {{ include "plr-intake.fullname" . }}' - export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "plr-intake.fullname" . }} --template "{{"{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}") - echo http://$SERVICE_IP:{{ .Values.service.port }} -{{- else if contains "ClusterIP" .Values.service.type }} - export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name={{ include "plr-intake.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") - export CONTAINER_PORT=$(kubectl get pod --namespace {{ .Release.Namespace }} $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}") - echo "Visit http://127.0.0.1:8080 to use your application" - kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME 8080:$CONTAINER_PORT -{{- end }} diff --git a/charts/plr-intake/templates/_helpers.tpl b/charts/plr-intake/templates/_helpers.tpl deleted file mode 100644 index 13c6f119..00000000 --- a/charts/plr-intake/templates/_helpers.tpl +++ /dev/null @@ -1,62 +0,0 @@ -{{/* -Expand the name of the chart. -*/}} -{{- define "plr-intake.name" -}} -{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }} -{{- end }} - -{{/* -Create a default fully qualified app name. -We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). -If release name contains chart name it will be used as a full name. -*/}} -{{- define "plr-intake.fullname" -}} -{{- if .Values.fullnameOverride }} -{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }} -{{- else }} -{{- $name := default .Chart.Name .Values.nameOverride }} -{{- if contains $name .Release.Name }} -{{- .Release.Name | trunc 63 | trimSuffix "-" }} -{{- else }} -{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }} -{{- end }} -{{- end }} -{{- end }} - -{{/* -Create chart name and version as used by the chart label. -*/}} -{{- define "plr-intake.chart" -}} -{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} -{{- end }} - -{{/* -Common labels -*/}} -{{- define "plr-intake.labels" -}} -helm.sh/chart: {{ include "plr-intake.chart" . }} -{{ include "plr-intake.selectorLabels" . }} -{{- if .Chart.AppVersion }} -app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} -{{- end }} -app.kubernetes.io/managed-by: {{ .Release.Service }} -{{- end }} - -{{/* -Selector labels -*/}} -{{- define "plr-intake.selectorLabels" -}} -app.kubernetes.io/name: {{ include "plr-intake.name" . }} -app.kubernetes.io/instance: {{ .Release.Name }} -{{- end }} - -{{/* -Create the name of the service account to use -*/}} -{{- define "plr-intake.serviceAccountName" -}} -{{- if .Values.serviceAccount.create }} -{{- default (include "plr-intake.fullname" .) .Values.serviceAccount.name }} -{{- else }} -{{- default "default" .Values.serviceAccount.name }} -{{- end }} -{{- end }} diff --git a/charts/plr-intake/templates/deployment.yaml b/charts/plr-intake/templates/deployment.yaml deleted file mode 100644 index 6e2c69b2..00000000 --- a/charts/plr-intake/templates/deployment.yaml +++ /dev/null @@ -1,112 +0,0 @@ -{{ $release := .Release.Name }} -{{ $ocEnv := regexFind "([^-]*$)" .Release.Namespace }} -{{ $isPR := hasPrefix "pr-" .Release.Name }} -## Derived release name -{{ $drn := ternary $release $ocEnv $isPR }} -# -apiVersion: apps/v1 -kind: Deployment -metadata: - name: {{ include "plr-intake.fullname" . }} - labels: - {{- include "plr-intake.labels" . | nindent 4 }} -spec: - {{- if not .Values.autoscaling.enabled }} - replicas: {{ .Values.replicaCount }} - {{- end }} - selector: - matchLabels: - {{- include "plr-intake.selectorLabels" . | nindent 6 }} - template: - metadata: - annotations: - {{- if .Values.global.commit_sha }} - commit_sha: {{ .Values.global.commit_sha }} - {{- end}} - {{- with .Values.podAnnotations }} - {{- toYaml . | nindent 8 }} - {{- end }} - labels: - {{- include "plr-intake.selectorLabels" . | nindent 8 }} - spec: - {{- with .Values.imagePullSecrets }} - imagePullSecrets: - {{- toYaml . | nindent 8 }} - {{- end }} - serviceAccountName: {{ include "plr-intake.serviceAccountName" . }} - securityContext: - {{- toYaml .Values.podSecurityContext | nindent 8 }} - containers: - - name: {{ .Chart.Name }} - securityContext: - {{- toYaml .Values.securityContext | nindent 12 }} - image: {{ .Values.global.image.registry }}/{{ .Values.image.repository }}:{{ .Values.global.image.tag | default .Chart.AppVersion }} - imagePullPolicy: {{ .Values.image.pullPolicy }} - env: - - name: DB_HOST - value: pidp-postgresql - - name: POSTGRESQL_PASSWORD - valueFrom: - secretKeyRef: - name: pidp-postgresql - key: database-password - - name: POSTGRESQL_USER - valueFrom: - secretKeyRef: - name: pidp-postgresql - key: database-user - - name: POSTGRESQL_DATABASE - {{- if $isPR }} - value: pidp_{{ $drn }} - {{ else }} - valueFrom: - secretKeyRef: - name: pidp-postgresql - key: database-name - {{- end }} - - name: ClientCertThumbprint - valueFrom: - secretKeyRef: - name: plr-integration - key: client_cert_thumbprint - - name: ConnectionStrings__PlrDatabase - value: "Host=$(DB_HOST);Port=5432;Database=$(POSTGRESQL_DATABASE);Username=$(POSTGRESQL_USER);Password=$(POSTGRESQL_PASSWORD)" - ports: - - name: http - containerPort: 8080 - protocol: TCP - livenessProbe: - httpGet: - path: /health/liveness - port: http - timeoutSeconds: 1 - periodSeconds: 10 - successThreshold: 1 - failureThreshold: 3 - startupProbe: - httpGet: - path: /health/liveness - port: http - scheme: HTTP - timeoutSeconds: 1 - periodSeconds: 10 - successThreshold: 1 - failureThreshold: 30 - # readinessProbe: - # httpGet: - # path: / - # port: http - resources: - {{- toYaml .Values.resources | nindent 12 }} - {{- with .Values.nodeSelector }} - nodeSelector: - {{- toYaml . | nindent 8 }} - {{- end }} - {{- with .Values.affinity }} - affinity: - {{- toYaml . | nindent 8 }} - {{- end }} - {{- with .Values.tolerations }} - tolerations: - {{- toYaml . | nindent 8 }} - {{- end }} diff --git a/charts/plr-intake/templates/hpa.yaml b/charts/plr-intake/templates/hpa.yaml deleted file mode 100644 index 21605cce..00000000 --- a/charts/plr-intake/templates/hpa.yaml +++ /dev/null @@ -1,28 +0,0 @@ -{{- if .Values.autoscaling.enabled }} -apiVersion: autoscaling/v2beta1 -kind: HorizontalPodAutoscaler -metadata: - name: {{ include "plr-intake.fullname" . }} - labels: - {{- include "plr-intake.labels" . | nindent 4 }} -spec: - scaleTargetRef: - apiVersion: apps/v1 - kind: Deployment - name: {{ include "plr-intake.fullname" . }} - minReplicas: {{ .Values.autoscaling.minReplicas }} - maxReplicas: {{ .Values.autoscaling.maxReplicas }} - metrics: - {{- if .Values.autoscaling.targetCPUUtilizationPercentage }} - - type: Resource - resource: - name: cpu - targetAverageUtilization: {{ .Values.autoscaling.targetCPUUtilizationPercentage }} - {{- end }} - {{- if .Values.autoscaling.targetMemoryUtilizationPercentage }} - - type: Resource - resource: - name: memory - targetAverageUtilization: {{ .Values.autoscaling.targetMemoryUtilizationPercentage }} - {{- end }} -{{- end }} diff --git a/charts/plr-intake/templates/ingress.yaml b/charts/plr-intake/templates/ingress.yaml deleted file mode 100644 index 10449ea2..00000000 --- a/charts/plr-intake/templates/ingress.yaml +++ /dev/null @@ -1,61 +0,0 @@ -{{- if .Values.ingress.enabled -}} -{{- $fullName := include "plr-intake.fullname" . -}} -{{- $svcPort := .Values.service.port -}} -{{- if and .Values.ingress.className (not (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion)) }} - {{- if not (hasKey .Values.ingress.annotations "kubernetes.io/ingress.class") }} - {{- $_ := set .Values.ingress.annotations "kubernetes.io/ingress.class" .Values.ingress.className}} - {{- end }} -{{- end }} -{{- if semverCompare ">=1.19-0" .Capabilities.KubeVersion.GitVersion -}} -apiVersion: networking.k8s.io/v1 -{{- else if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion -}} -apiVersion: networking.k8s.io/v1beta1 -{{- else -}} -apiVersion: extensions/v1beta1 -{{- end }} -kind: Ingress -metadata: - name: {{ $fullName }} - labels: - {{- include "plr-intake.labels" . | nindent 4 }} - {{- with .Values.ingress.annotations }} - annotations: - {{- toYaml . | nindent 4 }} - {{- end }} -spec: - {{- if and .Values.ingress.className (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion) }} - ingressClassName: {{ .Values.ingress.className }} - {{- end }} - {{- if .Values.ingress.tls }} - tls: - {{- range .Values.ingress.tls }} - - hosts: - {{- range .hosts }} - - {{ . | quote }} - {{- end }} - secretName: {{ .secretName }} - {{- end }} - {{- end }} - rules: - {{- range .Values.ingress.hosts }} - - host: {{ .host | quote }} - http: - paths: - {{- range .paths }} - - path: {{ .path }} - {{- if and .pathType (semverCompare ">=1.18-0" $.Capabilities.KubeVersion.GitVersion) }} - pathType: {{ .pathType }} - {{- end }} - backend: - {{- if semverCompare ">=1.19-0" $.Capabilities.KubeVersion.GitVersion }} - service: - name: {{ $fullName }} - port: - number: {{ $svcPort }} - {{- else }} - serviceName: {{ $fullName }} - servicePort: {{ $svcPort }} - {{- end }} - {{- end }} - {{- end }} -{{- end }} diff --git a/charts/plr-intake/templates/migrations.yaml b/charts/plr-intake/templates/migrations.yaml deleted file mode 100644 index a8aee578..00000000 --- a/charts/plr-intake/templates/migrations.yaml +++ /dev/null @@ -1,57 +0,0 @@ -{{- if .Values.migrations.enabled }} -{{ $release := .Release.Name }} -{{ $ocEnv := regexFind "([^-]*$)" .Release.Namespace }} -{{ $isPR := hasPrefix "pr-" .Release.Name }} -## Derived release name -{{ $drn := ternary $release $ocEnv $isPR }} -# -apiVersion: batch/v1 -kind: Job -metadata: - name: {{ include "plr-intake.fullname" . }}-migrations - annotations: - helm.sh/hook: pre-install, pre-upgrade - helm.sh/hook-weight: "10" - labels: - {{- include "plr-intake.labels" . | nindent 4 }} -spec: - ttlSecondsAfterFinished: 30 - template: - spec: - containers: - - name: migrations - image: {{ .Values.global.image.registry }}/{{ .Values.image.repository }}:{{ .Values.global.image.tag | default .Chart.AppVersion }} - imagePullPolicy: Always - command: ['./efbundle', '--connection', '$(ConnectionStrings__PlrDatabase)'] - env: - - name: DB_HOST - value: pidp-postgresql - - name: POSTGRESQL_PASSWORD - valueFrom: - secretKeyRef: - name: pidp-postgresql - key: database-password - - name: POSTGRESQL_USER - valueFrom: - secretKeyRef: - name: pidp-postgresql - key: database-user - - name: POSTGRESQL_DATABASE - {{- if $isPR }} - value: pidp_{{ $drn }} - {{ else }} - valueFrom: - secretKeyRef: - name: pidp-postgresql - key: database-name - {{- end }} - - name: DOTNET_BUNDLE_EXTRACT_BASE_DIR - value: /tmp - - name: ConnectionStrings__PlrDatabase - valueFrom: - configMapKeyRef: - name: pidp-plr-database - key: CONNECTION_STRINGS_PLR - restartPolicy: Never - backoffLimit: 3 -{{- end }} diff --git a/charts/plr-intake/templates/service.yaml b/charts/plr-intake/templates/service.yaml deleted file mode 100644 index ad6d30b6..00000000 --- a/charts/plr-intake/templates/service.yaml +++ /dev/null @@ -1,15 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - name: {{ include "plr-intake.fullname" . }} - labels: - {{- include "plr-intake.labels" . | nindent 4 }} -spec: - type: {{ .Values.service.type }} - ports: - - port: {{ .Values.service.port }} - targetPort: http - protocol: TCP - name: http - selector: - {{- include "plr-intake.selectorLabels" . | nindent 4 }} diff --git a/charts/plr-intake/templates/serviceaccount.yaml b/charts/plr-intake/templates/serviceaccount.yaml deleted file mode 100644 index 3bdc4173..00000000 --- a/charts/plr-intake/templates/serviceaccount.yaml +++ /dev/null @@ -1,12 +0,0 @@ -{{- if .Values.serviceAccount.create -}} -apiVersion: v1 -kind: ServiceAccount -metadata: - name: {{ include "plr-intake.serviceAccountName" . }} - labels: - {{- include "plr-intake.labels" . | nindent 4 }} - {{- with .Values.serviceAccount.annotations }} - annotations: - {{- toYaml . | nindent 4 }} - {{- end }} -{{- end }} diff --git a/charts/plr-intake/templates/tests/test-connection.yaml b/charts/plr-intake/templates/tests/test-connection.yaml deleted file mode 100644 index 95478b01..00000000 --- a/charts/plr-intake/templates/tests/test-connection.yaml +++ /dev/null @@ -1,15 +0,0 @@ -apiVersion: v1 -kind: Pod -metadata: - name: "{{ include "plr-intake.fullname" . }}-test-connection" - labels: - {{- include "plr-intake.labels" . | nindent 4 }} - annotations: - "helm.sh/hook": test -spec: - containers: - - name: wget - image: busybox - command: ['wget'] - args: ['{{ include "plr-intake.fullname" . }}:{{ .Values.service.port }}'] - restartPolicy: Never diff --git a/charts/plr-intake/values.yaml b/charts/plr-intake/values.yaml deleted file mode 100644 index 40edbfd1..00000000 --- a/charts/plr-intake/values.yaml +++ /dev/null @@ -1,98 +0,0 @@ -# Default values for plr-intake. -# This is a YAML-formatted file. -# Declare variables to be passed into your templates. - -global: - vanityURL: "apps.silver.devops.gov.bc.ca" - commit_sha: "" - image: - registry: image-registry.openshift-image-registry.svc:5000/e27db1-tools - tag: latest - -replicaCount: 1 - -image: - repository: pidp-plr-intake - pullPolicy: Always - # Overrides the image tag whose default is the chart appVersion. - tag: "latest" - -imagePullSecrets: [] -nameOverride: "" -fullnameOverride: "" - -database: - # .NET Core database connection string - dbConnectionString: 'host=postgresql;port=5432;database=pidpdb;username=postgres;password=postgres' - # If secret exists, it should contain key "database_url". specify the name of the secret below. - # existingSecret: - -mutualAuth: - # existingSecret: - -# Run migrations pre-install and pre-upgrade -migrations: - enabled: false - -serviceAccount: - # Specifies whether a service account should be created - create: false - # Annotations to add to the service account - annotations: {} - # The name of the service account to use. - # If not set and create is true, a name is generated using the fullname template - name: "" - -podAnnotations: {} - -podSecurityContext: {} - # fsGroup: 2000 - -securityContext: {} - # capabilities: - # drop: - # - ALL - # readOnlyRootFilesystem: true - # runAsNonRoot: true - # runAsUser: 1000 - -service: - type: ClusterIP - port: 8080 - -ingress: - enabled: false - className: "" - annotations: {} - # kubernetes.io/ingress.class: nginx - # kubernetes.io/tls-acme: "true" - hosts: - - host: pidp-plr-intake-e27db1-dev.apps.silver.devops.gov.bc.ca - paths: - - path: / - pathType: ImplementationSpecific - tls: [] - # - secretName: chart-example-tls - # hosts: - # - chart-example.local - -resources: - limits: - cpu: 50m - memory: 128Mi - requests: - cpu: 25m - memory: 60Mi - -autoscaling: - enabled: false - minReplicas: 1 - maxReplicas: 100 - targetCPUUtilizationPercentage: 80 - # targetMemoryUtilizationPercentage: 80 - -nodeSelector: {} - -tolerations: [] - -affinity: {} diff --git a/charts/webapi/.helmignore b/charts/webapi/.helmignore deleted file mode 100644 index 0e8a0eb3..00000000 --- a/charts/webapi/.helmignore +++ /dev/null @@ -1,23 +0,0 @@ -# Patterns to ignore when building packages. -# This supports shell glob matching, relative path matching, and -# negation (prefixed with !). Only one pattern per line. -.DS_Store -# Common VCS dirs -.git/ -.gitignore -.bzr/ -.bzrignore -.hg/ -.hgignore -.svn/ -# Common backup files -*.swp -*.bak -*.tmp -*.orig -*~ -# Various IDEs -.project -.idea/ -*.tmproj -.vscode/ diff --git a/charts/webapi/Chart.yaml b/charts/webapi/Chart.yaml deleted file mode 100644 index 9088f157..00000000 --- a/charts/webapi/Chart.yaml +++ /dev/null @@ -1,24 +0,0 @@ -apiVersion: v2 -name: webapi -description: A Helm chart for Kubernetes - -# A chart can be either an 'application' or a 'library' chart. -# -# Application charts are a collection of templates that can be packaged into versioned archives -# to be deployed. -# -# Library charts provide useful utilities or functions for the chart developer. They're included as -# a dependency of application charts to inject those utilities and functions into the rendering -# pipeline. Library charts do not define any templates and therefore cannot be deployed. -type: application - -# This is the chart version. This version number should be incremented each time you make changes -# to the chart and its templates, including the app version. -# Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 0.3.0 - -# This is the version number of the application being deployed. This version number should be -# incremented each time you make changes to the application. Versions are not expected to -# follow Semantic Versioning. They should reflect the version the application is using. -# It is recommended to use it with quotes. -appVersion: "0.0.2" diff --git a/charts/webapi/templates/NOTES.txt b/charts/webapi/templates/NOTES.txt deleted file mode 100644 index ef6cf322..00000000 --- a/charts/webapi/templates/NOTES.txt +++ /dev/null @@ -1,22 +0,0 @@ -1. Get the application URL by running these commands: -{{- if .Values.ingress.enabled }} -{{- range $host := .Values.ingress.hosts }} - {{- range .paths }} - http{{ if $.Values.ingress.tls }}s{{ end }}://{{ $host.host }}{{ .path }} - {{- end }} -{{- end }} -{{- else if contains "NodePort" .Values.service.type }} - export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "webapi.fullname" . }}) - export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}") - echo http://$NODE_IP:$NODE_PORT -{{- else if contains "LoadBalancer" .Values.service.type }} - NOTE: It may take a few minutes for the LoadBalancer IP to be available. - You can watch the status of by running 'kubectl get --namespace {{ .Release.Namespace }} svc -w {{ include "webapi.fullname" . }}' - export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "webapi.fullname" . }} --template "{{"{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}") - echo http://$SERVICE_IP:{{ .Values.service.port }} -{{- else if contains "ClusterIP" .Values.service.type }} - export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name={{ include "webapi.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") - export CONTAINER_PORT=$(kubectl get pod --namespace {{ .Release.Namespace }} $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}") - echo "Visit http://127.0.0.1:8080 to use your application" - kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME 8080:$CONTAINER_PORT -{{- end }} diff --git a/charts/webapi/templates/_helpers.tpl b/charts/webapi/templates/_helpers.tpl deleted file mode 100644 index a57aae92..00000000 --- a/charts/webapi/templates/_helpers.tpl +++ /dev/null @@ -1,62 +0,0 @@ -{{/* -Expand the name of the chart. -*/}} -{{- define "webapi.name" -}} -{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }} -{{- end }} - -{{/* -Create a default fully qualified app name. -We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). -If release name contains chart name it will be used as a full name. -*/}} -{{- define "webapi.fullname" -}} -{{- if .Values.fullnameOverride }} -{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }} -{{- else }} -{{- $name := default .Chart.Name .Values.nameOverride }} -{{- if contains $name .Release.Name }} -{{- .Release.Name | trunc 63 | trimSuffix "-" }} -{{- else }} -{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }} -{{- end }} -{{- end }} -{{- end }} - -{{/* -Create chart name and version as used by the chart label. -*/}} -{{- define "webapi.chart" -}} -{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} -{{- end }} - -{{/* -Common labels -*/}} -{{- define "webapi.labels" -}} -helm.sh/chart: {{ include "webapi.chart" . }} -{{ include "webapi.selectorLabels" . }} -{{- if .Chart.AppVersion }} -app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} -{{- end }} -app.kubernetes.io/managed-by: {{ .Release.Service }} -{{- end }} - -{{/* -Selector labels -*/}} -{{- define "webapi.selectorLabels" -}} -app.kubernetes.io/name: {{ include "webapi.name" . }} -app.kubernetes.io/instance: {{ .Release.Name }} -{{- end }} - -{{/* -Create the name of the service account to use -*/}} -{{- define "webapi.serviceAccountName" -}} -{{- if .Values.serviceAccount.create }} -{{- default (include "webapi.fullname" .) .Values.serviceAccount.name }} -{{- else }} -{{- default "default" .Values.serviceAccount.name }} -{{- end }} -{{- end }} diff --git a/charts/webapi/templates/deployment.yaml b/charts/webapi/templates/deployment.yaml deleted file mode 100644 index 656d2574..00000000 --- a/charts/webapi/templates/deployment.yaml +++ /dev/null @@ -1,149 +0,0 @@ -{{ $release := .Release.Name }} -{{ $ocEnv := regexFind "([^-]*$)" .Release.Namespace }} -{{ $domain := .Values.global.vanityURL }} -{{ $isPR := hasPrefix "pr-" .Release.Name }} -## Derived release name -{{ $drn := ternary $release $ocEnv $isPR }} -{{ $isProd := contains "prod" $ocEnv }} -# -apiVersion: apps/v1 -kind: Deployment -metadata: - name: {{ include "webapi.fullname" . }} - labels: - {{- include "webapi.labels" . | nindent 4 }} -spec: - {{- if not .Values.autoscaling.enabled }} - replicas: {{ .Values.replicaCount }} - {{- end }} - selector: - matchLabels: - {{- include "webapi.selectorLabels" . | nindent 6 }} - template: - metadata: - annotations: - vault.hashicorp.com/agent-inject: 'true' - vault.hashicorp.com/agent-pre-populate-only: 'true' - vault.hashicorp.com/auth-path: auth/k8s-gold - vault.hashicorp.com/namespace: platform-services - vault.hashicorp.com/agent-requests-cpu: 5m - vault.hashicorp.com/agent-limits-cpu: 10m - vault.hashicorp.com/agent-requests-mem: 20Mi - vault.hashicorp.com/role: {{ .Values.global.vault.role }} # licenseplate-nonprod or licenseplate-prod are your options - vault.hashicorp.com/agent-inject-secret-DIAM-common: {{ .Values.global.vault.role }}/{{ .Values.global.vault.path }}DIAM-common - vault.hashicorp.com/agent-inject-template-DIAM-common: | - {{`{{- with secret `}}"{{ .Values.global.vault.role }}/{{ .Values.global.vault.path }}DIAM-common"{{` }} - {{- range $k, $v := .Data.data }} - {{ $k }}="{{ $v }}"{{ end -}} - {{- end `}} }} - vault.hashicorp.com/agent-inject-secret-DIAM-webapi: {{ .Values.global.vault.role }}/{{ .Values.global.vault.path }}DIAM-webapi - vault.hashicorp.com/agent-inject-template-DIAM-webapi: | - {{`{{- with secret `}}"{{ .Values.global.vault.role }}/{{ .Values.global.vault.path }}DIAM-webapi"{{` }} - {{- range $k, $v := .Data.data }} - {{ $k }}="{{ $v }}"{{ end -}} - {{- end `}} }} - vault.hashicorp.com/agent-inject-secret-DIAM-keycloak: {{ .Values.global.vault.role }}/{{ .Values.global.vault.path }}DIAM-keycloak - vault.hashicorp.com/agent-inject-template-DIAM-keycloak: | - {{`{{- with secret `}}"{{ .Values.global.vault.role }}/{{ .Values.global.vault.path }}DIAM-keycloak"{{` }} - {{- range $k, $v := .Data.data }} - {{ $k }}="{{ $v }}"{{ end -}} - {{- end `}} }} - {{- if .Values.global.commit_sha }} - commit_sha: {{ .Values.global.commit_sha }} - {{- end}} - {{- with .Values.podAnnotations }} - {{- toYaml . | nindent 8 }} - {{- end }} - labels: - {{- include "webapi.selectorLabels" . | nindent 8 }} - spec: - {{- with .Values.imagePullSecrets }} - imagePullSecrets: - {{- toYaml . | nindent 8 }} - {{- end }} - serviceAccountName: {{ .Values.global.licenseplate }}-vault - securityContext: - {{- toYaml .Values.podSecurityContext | nindent 8 }} - containers: - - name: {{ .Chart.Name }} - securityContext: - {{- toYaml .Values.securityContext | nindent 12 }} - image: "{{ .Values.global.image.registry }}/{{ .Values.image.repository }}:{{ .Values.global.image.tag | default .Chart.AppVersion }}" - imagePullPolicy: {{ .Values.image.pullPolicy }} - env: - - #- name: JumClient__Url - # value: {{ .Values.jumClientURL }} - # Skip null emails - - name: JUSTIN_SKIP_USER_EMAIL_CHECK - value: "true" - - name: ASPNETCORE_ENVIRONMENT - value: {{ .Values.aspnetcore.environment }} - - - - - name: ApplicationUrl - value: "https://{{ if $isProd }}{{else}}{{ $release }}.{{end}}{{ $domain }}" - - - - name: JUSTIN_EMAIL_CHANGE_DISABLED - value: "true" - - volumeMounts: - - name: kafka-truststore - mountPath: "/opt/kafka/certificates" - readOnly: true - envFrom: - - secretRef: - name: ches - - configMapRef: - name: mail-settings - - ports: - - name: http - containerPort: 8080 - protocol: TCP - livenessProbe: - httpGet: - path: /health/liveness - port: http - timeoutSeconds: 10 - periodSeconds: 30 - successThreshold: 1 - failureThreshold: 5 - readinessProbe: - httpGet: - path: /health/liveness - port: http - scheme: HTTP - timeoutSeconds: 10 - periodSeconds: 10 - successThreshold: 1 - failureThreshold: 15 - startupProbe: - httpGet: - path: /health/liveness - port: http - scheme: HTTP - timeoutSeconds: 5 - periodSeconds: 30 - successThreshold: 1 - failureThreshold: 30 - resources: - {{- toYaml .Values.resources | nindent 12 }} - {{- with .Values.nodeSelector }} - nodeSelector: - {{- toYaml . | nindent 8 }} - {{- end }} - {{- with .Values.affinity }} - affinity: - {{- toYaml . | nindent 8 }} - {{- end }} - {{- with .Values.tolerations }} - tolerations: - {{- toYaml . | nindent 8 }} - {{- end }} - volumes: - - name: kafka-truststore - secret: - secretName: kafka-cluster-client-truststore diff --git a/charts/webapi/templates/hpa.yaml b/charts/webapi/templates/hpa.yaml deleted file mode 100644 index 18afa5af..00000000 --- a/charts/webapi/templates/hpa.yaml +++ /dev/null @@ -1,28 +0,0 @@ -{{- if .Values.autoscaling.enabled }} -apiVersion: autoscaling/v2beta1 -kind: HorizontalPodAutoscaler -metadata: - name: {{ include "webapi.fullname" . }} - labels: - {{- include "webapi.labels" . | nindent 4 }} -spec: - scaleTargetRef: - apiVersion: apps/v1 - kind: Deployment - name: {{ include "webapi.fullname" . }} - minReplicas: {{ .Values.autoscaling.minReplicas }} - maxReplicas: {{ .Values.autoscaling.maxReplicas }} - metrics: - {{- if .Values.autoscaling.targetCPUUtilizationPercentage }} - - type: Resource - resource: - name: cpu - targetAverageUtilization: {{ .Values.autoscaling.targetCPUUtilizationPercentage }} - {{- end }} - {{- if .Values.autoscaling.targetMemoryUtilizationPercentage }} - - type: Resource - resource: - name: memory - targetAverageUtilization: {{ .Values.autoscaling.targetMemoryUtilizationPercentage }} - {{- end }} -{{- end }} diff --git a/charts/webapi/templates/ingress.yaml b/charts/webapi/templates/ingress.yaml deleted file mode 100644 index f8a0d0c9..00000000 --- a/charts/webapi/templates/ingress.yaml +++ /dev/null @@ -1,61 +0,0 @@ -{{- if .Values.ingress.enabled -}} -{{- $fullName := include "webapi.fullname" . -}} -{{- $svcPort := .Values.service.port -}} -{{- if and .Values.ingress.className (not (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion)) }} - {{- if not (hasKey .Values.ingress.annotations "kubernetes.io/ingress.class") }} - {{- $_ := set .Values.ingress.annotations "kubernetes.io/ingress.class" .Values.ingress.className}} - {{- end }} -{{- end }} -{{- if semverCompare ">=1.19-0" .Capabilities.KubeVersion.GitVersion -}} -apiVersion: networking.k8s.io/v1 -{{- else if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion -}} -apiVersion: networking.k8s.io/v1beta1 -{{- else -}} -apiVersion: extensions/v1beta1 -{{- end }} -kind: Ingress -metadata: - name: {{ $fullName }} - labels: - {{- include "webapi.labels" . | nindent 4 }} - {{- with .Values.ingress.annotations }} - annotations: - {{- toYaml . | nindent 4 }} - {{- end }} -spec: - {{- if and .Values.ingress.className (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion) }} - ingressClassName: {{ .Values.ingress.className }} - {{- end }} - {{- if .Values.ingress.tls }} - tls: - {{- range .Values.ingress.tls }} - - hosts: - {{- range .hosts }} - - {{ . | quote }} - {{- end }} - secretName: {{ .secretName }} - {{- end }} - {{- end }} - rules: - {{- range .Values.ingress.hosts }} - - host: {{ .host | quote }} - http: - paths: - {{- range .paths }} - - path: {{ .path }} - {{- if and .pathType (semverCompare ">=1.18-0" $.Capabilities.KubeVersion.GitVersion) }} - pathType: {{ .pathType }} - {{- end }} - backend: - {{- if semverCompare ">=1.19-0" $.Capabilities.KubeVersion.GitVersion }} - service: - name: {{ $fullName }} - port: - number: {{ $svcPort }} - {{- else }} - serviceName: {{ $fullName }} - servicePort: {{ $svcPort }} - {{- end }} - {{- end }} - {{- end }} -{{- end }} diff --git a/charts/webapi/templates/migrations.yaml b/charts/webapi/templates/migrations.yaml deleted file mode 100644 index cc99b464..00000000 --- a/charts/webapi/templates/migrations.yaml +++ /dev/null @@ -1,58 +0,0 @@ -{{- if .Values.migrations.enabled }} -{{ $release := .Release.Name }} -{{ $ocEnv := regexFind "([^-]*$)" .Release.Namespace }} -{{ $isPR := hasPrefix "pr-" .Release.Name }} -## Derived release name -{{ $drn := ternary $release $ocEnv $isPR }} -# -apiVersion: batch/v1 -kind: Job -metadata: - name: {{ include "webapi.fullname" . }}-migrations - annotations: - helm.sh/hook: pre-install, pre-upgrade - helm.sh/hook-weight: "10" - labels: - {{- include "webapi.labels" . | nindent 4 }} -spec: - ttlSecondsAfterFinished: 30 - template: - spec: - containers: - - name: migrations - image: {{ .Values.global.image.registry }}/{{ .Values.image.repository }}:{{ .Values.global.image.tag | default .Chart.AppVersion }} - imagePullPolicy: Always - command: ['./efbundle', '--connection', '$(ConnectionStrings__PidpDatabase)'] - env: - - name: DB_HOST - value: pidp-postgresql - - name: POSTGRESQL_PASSWORD - valueFrom: - secretKeyRef: - name: pidp-postgresql - key: database-password - - name: POSTGRESQL_USER - valueFrom: - secretKeyRef: - name: pidp-postgresql - key: database-user - - name: POSTGRESQL_DATABASE - {{- if $isPR }} - value: pidp_{{ $drn }} - {{ else }} - valueFrom: - secretKeyRef: - name: pidp-postgresql - key: database-name - {{- end }} - - name: DOTNET_BUNDLE_EXTRACT_BASE_DIR - value: /tmp - - name: ConnectionStrings__PidpDatabase - valueFrom: - configMapKeyRef: - name: pidp-api-database - key: CONNECTION_STRINGS_PIDP - restartPolicy: Never - backoffLimit: 3 -{{- end }} - diff --git a/charts/webapi/templates/service.yaml b/charts/webapi/templates/service.yaml deleted file mode 100644 index 2cd48bf7..00000000 --- a/charts/webapi/templates/service.yaml +++ /dev/null @@ -1,15 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - name: {{ include "webapi.fullname" . }} - labels: - {{- include "webapi.labels" . | nindent 4 }} -spec: - type: {{ .Values.service.type }} - ports: - - port: {{ .Values.service.port }} - targetPort: http - protocol: TCP - name: http - selector: - {{- include "webapi.selectorLabels" . | nindent 4 }} diff --git a/charts/webapi/templates/serviceaccount.yaml b/charts/webapi/templates/serviceaccount.yaml deleted file mode 100644 index 3b1d725c..00000000 --- a/charts/webapi/templates/serviceaccount.yaml +++ /dev/null @@ -1,12 +0,0 @@ -{{- if .Values.serviceAccount.create -}} -apiVersion: v1 -kind: ServiceAccount -metadata: - name: {{ include "webapi.serviceAccountName" . }} - labels: - {{- include "webapi.labels" . | nindent 4 }} - {{- with .Values.serviceAccount.annotations }} - annotations: - {{- toYaml . | nindent 4 }} - {{- end }} -{{- end }} diff --git a/charts/webapi/templates/tests/test-connection.yaml b/charts/webapi/templates/tests/test-connection.yaml deleted file mode 100644 index 2356cc7b..00000000 --- a/charts/webapi/templates/tests/test-connection.yaml +++ /dev/null @@ -1,15 +0,0 @@ -apiVersion: v1 -kind: Pod -metadata: - name: "{{ include "webapi.fullname" . }}-test-connection" - labels: - {{- include "webapi.labels" . | nindent 4 }} - annotations: - "helm.sh/hook": test -spec: - containers: - - name: wget - image: busybox - command: ['wget'] - args: ['{{ include "webapi.fullname" . }}:{{ .Values.service.port }}'] - restartPolicy: Never diff --git a/charts/webapi/values.yaml b/charts/webapi/values.yaml deleted file mode 100644 index 0f0f7417..00000000 --- a/charts/webapi/values.yaml +++ /dev/null @@ -1,98 +0,0 @@ -# Default values for webapi. -# This is a YAML-formatted file. -# Declare variables to be passed into your templates. - -global: - vanityURL: "pidp-e27db1-dev.apps.gold.devops.gov.bc.ca" - commit_sha: "" - image: - registry: image-registry.openshift-image-registry.svc:5000/e27db1-tools - tag: develop - -replicaCount: 1 -aspnetcore: - environment: Staging - -image: - repository: pidp-webapi - pullPolicy: Always - # Overrides the image tag whose default is the chart appVersion. - tag: "develop" - -imagePullSecrets: [] -nameOverride: "" -fullnameOverride: "" - -database: - # .NET Core database connection string - dbConnectionString: 'host=postgresql;port=5432;database=pidpdb;username=postgres;password=postgres' - databaseHost: postgresql - # If secret exists, it should contain key "database_url". specify the name of the secret below. - existingSecret: "pidp-postgresql" - -# Run migrations pre-install and pre-upgrade -migrations: - enabled: true - -serviceAccount: - # Specifies whether a service account should be created - create: false - # Annotations to add to the service account - annotations: {} - # The name of the service account to use. - # If not set and create is true, a name is generated using the fullname template - name: "" - -podAnnotations: {} - -podSecurityContext: {} - # fsGroup: 2000 - -securityContext: {} - # capabilities: - # drop: - # - ALL - # readOnlyRootFilesystem: true - # runAsNonRoot: true - # runAsUser: 1000 - -service: - type: ClusterIP - port: 8080 - -ingress: - enabled: false - className: "" - annotations: {} - # kubernetes.io/ingress.class: nginx - # kubernetes.io/tls-acme: "true" - hosts: - - host: pidp-api-e27db1-dev.apps.silver.devops.gov.bc.ca - paths: - - path: / - pathType: ImplementationSpecific - tls: [] - # - secretName: chart-example-tls - # hosts: - # - chart-example.local - -resources: - limits: - cpu: 500m - memory: 512Mi - requests: - cpu: 125m - memory: 128Mi - -autoscaling: - enabled: false - minReplicas: 1 - maxReplicas: 100 - targetCPUUtilizationPercentage: 80 - # targetMemoryUtilizationPercentage: 80 - -nodeSelector: {} - -tolerations: [] - -affinity: {} diff --git a/deploy/demo_values.yaml b/deploy/demo_values.yaml deleted file mode 100644 index 6625a5b7..00000000 --- a/deploy/demo_values.yaml +++ /dev/null @@ -1,35 +0,0 @@ -# PR Helm values -global: - vanityURL: "healthprovideridentityportal.gov.bc.ca" - commit_sha: "" - image: - tag: master - -database: - autoCreate: false - # databaseHost: dev-patroni - # existingSecret: dev-patroni-secret - -redis: - enabled: false - auth: - existingSecret: redis - existingSecretPasswordKey: database-password - -nginx: - replicaCount: 2 - -frontend: - replicaCount: 3 - settings: - environmentName: test - keycloak: - url: https://common-logon-test.hlth.gov.bc.ca/auth - -webapi: - replicaCount: 3 - aspnetcore: - environment: Staging - -plr-intake: - replicaCount: 1 \ No newline at end of file diff --git a/deploy/dev_values.yaml b/deploy/dev_values.yaml deleted file mode 100644 index f4c90465..00000000 --- a/deploy/dev_values.yaml +++ /dev/null @@ -1,137 +0,0 @@ -# PR Helm values -global: - vanityURL: "dev.jpidp.justice.gov.bc.ca" - commit_sha: "" - licenseplate: "e27db1" - environment: "dev" - image: - tag: develop - vault: - role: e27db1-nonprod - path: dev/ - -route: - enabled: false - -pidp-sso: - keycloak: - realm: https://dev.common-sso.justice.gov.bc.ca/auth/realms/BCPS - auth: - existingSecret: pidp-sso-postgresql - secretKeys: - postgresPassword: password - -postgresql: - postgresqlDatabase: jps-pidp - auth: - postgresPassword: "postgres" - username: postgres - existingSecret: postgresql - secretKeys: - adminPasswordKey: admin-password - userPasswordKey: jps-password - primary: - initdb: - scriptsConfigMap: pipd-postgres-init - - - -database: - autoCreate: false - # databaseHost: dev-patroni - # existingSecret: dev-patroni-secret - # trigger - -keycloak: - realm: BCPS - auth: https://dev.common-sso.justice.gov.bc.ca/auth/realms/BCPS - base: https://dev.common-sso.justice.gov.bc.ca/auth - -edt-service: - image: - tag: develop - migrations: - enabled: false - -jum-notification: - migrations: - enabled: false - -edt-casemgmt: - migrations: - enabled: false - -edt-disclosure: - serviceAccount: - name: "e27db1-vault" - migrations: - enabled: false - -approvalflow: - migrations: - enabled: false - -jum-backend: - route: - enabled: false - migrations: - enabled: false - - -redis: - enabled: false - auth: - existingSecret: redis - existingSecretPasswordKey: database-password - -nginx: - replicaCount: 2 - -frontend: - image: - repository: pidp-frontend - pullPolicy: Always - tag: "develop" - replicaCount: 1 - settings: - launch: - publicDiscPortalUrl: "https://dev.disclosure.bcprosecution.gov.bc.ca" - subAgencyAufPortalUrl: "https://auf.dev.justice.gov.bc.ca" - bcpsDemsPortalUrl: "https://dems.dev.jag.gov.bc.ca" - bcLawDiscPortalUrl: "https://auf.dev.justice.gov.bc.ca" - subAgencyAufPortalLabel: "Launch DEMS Agency Upload Facility (AUF)" - bcpsDemsPortalLabel: "Launch DEMS" - bcLawDiscPortalLabel: "Launch DEMS Agency Upload Facility (AUF)" - outOfCustodyPortalLabel: "Launch BCPS Disclosure Portal" - edtURL: https://dems.dev.jag.gov.bc.ca/Edt.aspx#/import/ - environmentName: dev - keycloak: - url: https://dev.common-sso.justice.gov.bc.ca/auth - realm: BCPS - - -admin-frontend: - image: - repository: pidp-admin-frontend - pullPolicy: Always - tag: "develop" - replicaCount: 1 - settings: - environmentName: dev - keycloak: - url: https://dev.common-sso.justice.gov.bc.ca/auth - realm: BCPS - - -webapi: - jumClientURL: https://jum-api-e27db1-dev.apps.gold.devops.gov.bc.ca/api - replicaCount: 1 - image: - tag: develop - aspnetcore: - environment: Staging - migrations: - enabled: false - -plr-intake: - replicaCount: 1 \ No newline at end of file diff --git a/deploy/prod_values.yaml b/deploy/prod_values.yaml deleted file mode 100644 index b7cb1a4a..00000000 --- a/deploy/prod_values.yaml +++ /dev/null @@ -1,77 +0,0 @@ -# PR Helm values -global: - vanityURL: "jpidp.justice.gov.bc.ca" - commit_sha: "" - licenseplate: "e27db1" - environment: "prod" - image: - tag: main - vault: - role: e27db1-prod - path: prod/ - -route: - enabled: false - -database: - autoCreate: false - # databaseHost: dev-patroni - # existingSecret: dev-patroni-secret - -redis: - enabled: false - auth: - existingSecret: redis - existingSecretPasswordKey: database-password - - -nginx: - replicaCount: 2 - -keycloak: - realmName: BCPS - auth: https://common-sso.justice.gov.bc.ca/auth/realms/BCPS - base: https://common-sso.justice.gov.bc.ca/auth - -frontend: - replicaCount: 1 - settings: - launch: - publicDiscPortalUrl: "https://p.zpa-auth.net/IevTunx4Bg/doauth?origurl=https%3A%2F%2Fdisclosure%2Ebcprosecution%2Egov%2Ebc%2Eca%2FEdt%2Easpx%23&domain=accused.bcprosecution.gov.bc.ca" - subAgencyAufPortalUrl: "https://p.zpa-auth.net/IevTunx4Bg/doauth?origurl=https%3A%2F%2Fauf%2Ejustice%2Egov%2Ebc%2Eca%2FEdt%2Easpx%23&domain=agencies.justice.gov.bc.ca" - bcpsDemsPortalUrl: "https://dems.jag.gov.bc.ca/" - bcLawDiscPortalUrl: "https://p.zpa-auth.net/IevTunx4Bg/doauth?origurl=https%3A%2F%2Fdisclosure%2Ebcprosecution%2Egov%2Ebc%2Eca%2FEdt%2Easpx%23&domain=legalcounsel.bcprosecution.gov.bc.ca" - subAgencyAufPortalLabel: "Launch DEMS Agency Upload Facility (AUF)" - bcpsDemsPortalLabel: "Launch DEMS" - bcLawDiscPortalLabel: "Launch Disclosure Portal" - outOfCustodyPortalLabel: "Launch BCPS Disclosure Portal" - edtURL: https://dems.jag.gov.bc.ca - environmentName: prod - keycloak: - url: https://common-sso.justice.gov.bc.ca/auth - realm: "BCPS" - -webapi: - jumClientURL: https://jum-api-e27db1-prod.apps.gold.devops.gov.bc.ca/api - replicaCount: 1 - aspnetcore: - environment: Staging - migrations: - enabled: false - - -edt-casemgmt: - migrations: - enabled: false - -edt-disclosure: - migrations: - enabled: false - -plr-intake: - replicaCount: 1 - -edt-service: - migrations: - enabled: false - diff --git a/deploy/test_values.yaml b/deploy/test_values.yaml deleted file mode 100644 index 64b10bf3..00000000 --- a/deploy/test_values.yaml +++ /dev/null @@ -1,107 +0,0 @@ -# PR Helm values -global: - vanityURL: "test.jpidp.justice.gov.bc.ca" - commit_sha: "" - licenseplate: "e27db1" - environment: "test" - vault: - role: e27db1-nonprod - path: test/ - image: - tag: test - -pidp-sso: - keycloak: - realm: https://test.common-sso.justice.gov.bc.ca/auth/realms/BCPS - auth: - existingSecret: pidp-sso-postgresql - secretKeys: - postgresPassword: password - -postgresql: - postgresqlDatabase: jps-pidp - auth: - postgresPassword: "postgres" - username: postgres - existingSecret: postgresql - secretKeys: - adminPasswordKey: admin-password - userPasswordKey: jps-password - primary: - initdb: - scriptsConfigMap: pipd-postgres-init - - -route: - enabled: false - - - -edt-casemgmt: - migrations: - enabled: false - -edt-disclosure: - migrations: - enabled: false - -approvalflow: - migrations: - enabled: false - -database: - autoCreate: false - # databaseHost: dev-patroni - # existingSecret: dev-patroni-secret - # trigger - -keycloak: - realm: BCPS - auth: https://test.common-sso.justice.gov.bc.ca/auth/realms/BCPS - base: https://test.common-sso.justice.gov.bc.ca/auth - -edt-service: - migrations: - enabled: false - -redis: - enabled: false - auth: - existingSecret: redis - existingSecretPasswordKey: database-password - -nginx: - replicaCount: 2 - -frontend: - image: - repository: pidp-frontend - pullPolicy: Always - replicaCount: 1 - settings: - launch: - subAgencyAufPortalUrl: "https://p.zpa-auth.net/IevTunx4Bg/doauth?origurl=https%3A%2F%2Fauf%2Etest%2Ejustice%2Egov%2Ebc%2Eca%2FEdt%2Easpx%23&domain=test.agencies.justice.gov.bc.ca" - bcpsDemsPortalUrl: "https://dems.test.jag.gov.bc.ca/" - bcLawDiscPortalUrl: "https://p.zpa-auth.net/IevTunx4Bg/doauth?origurl=https%3A%2F%2Ftest%2Edisclosure%2Ebcprosecution%2Egov%2Ebc%2Eca%2FEdt%2Easpx%23&domain=test.legalcounsel.bcprosecution.gov.bc.ca" - publicDiscPortalUrl: "https://p.zpa-auth.net/IevTunx4Bg/doauth?origurl=https%3A%2F%2Ftest%2Edisclosure%2Ebcprosecution%2Egov%2Ebc%2Eca%2FEdt%2Easpx%23&domain=test.accused.bcprosecution.gov.bc.ca" - subAgencyAufPortalLabel: "Launch DEMS Agency Upload Facility (AUF)" - bcpsDemsPortalLabel: "Launch DEMS" - bcLawDiscPortalLabel: "Launch Disclosure Portal" - outOfCustodyPortalLabel: "Launch BCPS Disclosure Portal" - edtURL: https://p.zpa-auth.net/IevTunx4Bg/doauth?origurl=https%3A%2F%2Fauf%2Etest%2Ejustice%2Egov%2Ebc%2Eca%2FEdt%2Easpx%23&domain=test.agencies.justice.gov.bc.ca - environmentName: test - keycloak: - url: https://test.common-sso.justice.gov.bc.ca/auth - realm: BCPS - - -webapi: - jumClientURL: https://jum-api-e27db1-test.apps.gold.devops.gov.bc.ca/api - replicaCount: 1 - aspnetcore: - environment: Staging - migrations: - enabled: false - -plr-intake: - replicaCount: 1 \ No newline at end of file From 5ad5570774447e4b2bd9c5015feb4992697b6059 Mon Sep 17 00:00:00 2001 From: Lee Wright <258036@NTTDATA.COM> Date: Tue, 21 May 2024 08:46:51 -0700 Subject: [PATCH 08/21] Remove charts --- charts/pidp/charts/admin-frontend-0.3.1.tgz | Bin 4953 -> 0 bytes charts/pidp/charts/approvalflow-0.3.0.tgz | Bin 4835 -> 0 bytes charts/pidp/charts/diam-config-0.3.0.tgz | Bin 4599 -> 0 bytes charts/pidp/charts/edt-casemgmt-0.4.0.tgz | Bin 5266 -> 0 bytes charts/pidp/charts/edt-disclosure-0.10.0.tgz | Bin 4908 -> 0 bytes charts/pidp/charts/edt-service-0.4.0.tgz | Bin 5544 -> 0 bytes charts/pidp/charts/frontend-0.2.5.tgz | Bin 4704 -> 0 bytes charts/pidp/charts/jum-backend-0.3.0.tgz | Bin 5339 -> 0 bytes charts/pidp/charts/jum-notification-0.3.0.tgz | Bin 5112 -> 0 bytes charts/pidp/charts/webapi-0.4.0.tgz | Bin 5229 -> 0 bytes 10 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 charts/pidp/charts/admin-frontend-0.3.1.tgz delete mode 100644 charts/pidp/charts/approvalflow-0.3.0.tgz delete mode 100644 charts/pidp/charts/diam-config-0.3.0.tgz delete mode 100644 charts/pidp/charts/edt-casemgmt-0.4.0.tgz delete mode 100644 charts/pidp/charts/edt-disclosure-0.10.0.tgz delete mode 100644 charts/pidp/charts/edt-service-0.4.0.tgz delete mode 100644 charts/pidp/charts/frontend-0.2.5.tgz delete mode 100644 charts/pidp/charts/jum-backend-0.3.0.tgz delete mode 100644 charts/pidp/charts/jum-notification-0.3.0.tgz delete mode 100644 charts/pidp/charts/webapi-0.4.0.tgz diff --git a/charts/pidp/charts/admin-frontend-0.3.1.tgz b/charts/pidp/charts/admin-frontend-0.3.1.tgz deleted file mode 100644 index fd673af45ecc4a1137bffbdc3b5fbdc3912551e1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4953 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 XSRTv&_VPag00960No$rD0Av6FCe*+@ diff --git a/charts/pidp/charts/approvalflow-0.3.0.tgz b/charts/pidp/charts/approvalflow-0.3.0.tgz deleted file mode 100644 index 6e5abd2a5046441171df04740442580e3cf9f30f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4835 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 diff --git a/charts/pidp/charts/edt-casemgmt-0.4.0.tgz b/charts/pidp/charts/edt-casemgmt-0.4.0.tgz deleted file mode 100644 index d3705b39c157c249a311d93d0c3e59afa80c175f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5266 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 diff --git a/charts/pidp/charts/frontend-0.2.5.tgz b/charts/pidp/charts/frontend-0.2.5.tgz deleted file mode 100644 index bf795cf19ae5c9d574e8d71b87ef60b06dea2385..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4704 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 diff --git a/charts/pidp/charts/jum-backend-0.3.0.tgz b/charts/pidp/charts/jum-backend-0.3.0.tgz deleted file mode 100644 index 979d25016aac5729fa6d037ed54ff8c70dfc2e2a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5339 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 diff --git a/charts/pidp/charts/jum-notification-0.3.0.tgz b/charts/pidp/charts/jum-notification-0.3.0.tgz deleted file mode 100644 index f56b1424a8f695c71725a474e3d7f4e51e875693..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5112 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 a2T$#(J+*)3_J08Y0RR6XPo8Z6Y5)Mb3KKj4 diff --git a/charts/pidp/charts/webapi-0.4.0.tgz b/charts/pidp/charts/webapi-0.4.0.tgz deleted file mode 100644 index 2b49629c9140c8f5a154e2d249248f183f189a84..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5229 zcmV-z6q4&7iwG0|00000|0w_~VMtOiV@ORlOnEsqVl!4SWK%V1T2nbTPgYhoO;>Dc zVQyr3R8em|NM&qo0PH<~bKAC({aZ8o4tt8)u!W{a5{7ueZC~-}|c9-`(Hc`wDu0057!?3rYA_y)UL! z?cATFkcfUnE+`8fSnRe)6lFhqcF*2zc_>^?BdMzn;Ro~saMf&qDdX^CJV73!M9~UK zfDV}X)RM~x9UxKUQ@yWda6lw|!ch##Z)gA~A)^}oNjw_jcVuU@@= zTK^AGp20CrN$g87Q$Vk3Gb!wL>ls|msQ@Z~z~2wwpIKAJ10p4QFr_|fh+}kp!VwmP zQ!?>UfMhU1h=>sA0SzUCC5t&o3?iRM6n4ASZq0l)A->aY0W3&J8PeI3j!*~Von_B=o%W38EUiu9A{KWzI1?a zNvFh>LZLyQMaXkZT@QC(TQdxi6W{WfdxhK}kYwgS(n2xKQ7g0~7KhS-e!E3P6ryw) zHzYA!P|m^t)#H&QGaAlRyPPSG5ffB0#gs=$U>RAfM^WtiL*`R=>A<0XO_oB{K7;cG za!x%Z*g2a1DaPP>&IE#&3?DU*jcU%-xUF#LZgi4@ zC=?gKruut=Y=S7b@R6xYhqM?w)_ko0-{vAg% zPCRV4a=2tJs@3Q@AbE@mn?SyxE*`qBp1!7|Bh4^H0oQYsbL2oE0R&cEuv0u8RiFk~{}R5Bo*r#?*gOBfY6$$=eMtqq3Dn%K&mNCvS$I~${rNf0Qt zEDS?>9q<^x0b(#w0cK?@r4vIpZ{j|M$9{`vZ!lE=*FDN-CJlH$b{1A`|LUNl_%@0N`;JWj`!9JUcT#I1=wX^p_Wm$?vI;VksmB z>9A^uI6M>s7AlBZ{Re^Efqur47O19Ue6%A!783dCP^%!ur2}tzZ!|Cs)m*I1rfj@j zp9nF?B-S{hii@kvMYJjFCOB=~+JSIJ!<%ME=?jav8olb0CZW`TNR+#!e>tER4vA>Z zY6$8tkk{;nX$=q&IZtsJe5%HQZeC@8F14IagUCmv*mVz+W#ei&`oe*qeoltYO4hoO zj8?}M-VoK=lDxX_hnDg6?#?K7A7#^?wZa~BgO?bCo}LU5zlfrDNzFh2tfv}HNy z@4lzT-24`!D1-NR4=UjO-8Txn-6FAM!X>^^y3L~=(D1?-L7@#GKtOH^HENnEgTrSi zkA@#UNb1vnXps$(yGndBR5Q$U+`zrpY}^9cZiURl5&EbMQo0r;^D$L;TK?@8nNF$l zB@D=8`&NI3lKB6bZ`K{0U!II?c_Z(S#uop7Z*Tvg;{WgW_x7Ls|A#1j8{VPRCb6(v zhYuHLFj*=K5+)W?yK6x}LQg4^)ye`o1^c7fH>O%W(HF2@8xT&y8N!azb>O_MfomP8 zfdO)GTWjW|dM;(OS}9sP)z;EiKw`B53>8VI+g+^;F^w74>($C&E6^~ohP~2vU!WqB zcy|Ii1Lon7aoNfEPOPV`EN6leZpj?&_#Z$@Bu)nD+f*`1Y`-4TpkvA9%->~!Mff)e$NZzH#)iaczV<@gc{jhsBR?( zmX#U+=&V+q)hbzvFKFoD4WvWu7lfEDL+HKK3(eN6&8(=-x@iLB9dQ(^m0{I=-Mknx zH}x*7ad>__9vr?usR%4$-d(4>4;>OkcG)A<+sX!E=7RjD-bioPLRU8|5mR#7xV8e6 zL~SiK?o^njb4TZc%fr*b$wiaCiI{h{9`2+vYScc7+>vW$GF_Ba8-8{-TJzlDrOI- zG^}bqtMF9EB5iY=sI^?Gt&0&t_#GsVLl<7{>8~^x#nUOhfsWOwIcMsZ;_=ADcSuG> z*{~)2789RNDSAq`XzuNH>u+cX=mt`eQC$%*L6<09Bv^ojvn$i-DMjBCKscH`HYVXK zD&WP$g!GOFBL%CBztWR0?RM*Q3fw3wgC#RrCK796P!g`G?<{*1h0&5`eR3TzF9NSUteWbTLpqnV^5$AZxI~2v@sQl(_kx1oz>0 z;28PJJa+!Q1D$c_^HvrM0u~xR#VvdqfP~RG`hhLxUCq4H|DKMy0HEdvbiFCFN1|F6H->+e(sz@aB6OdeC|C)BjjMf4%dv)4W+T4LueR8Wux;=GfoP zj{GxFDux#da8AUKqc&L)x2gtRK|gy2$H?gdy^`mZP~@7NL>>~p%=?z~!H_A? zd7vTU%3J z@iPngJA^d!FqE*b8!Io=Nkf~|9Ehf(E*$2R0<$^^Avv!p1Y(N04Gr;9fYg8`j0Qxy z^RpuB&CJ)$eBOyy3F=h+q^OI6RHb;dm`CasN}=0xBIeX(JhELDbjb`uY0>akbfp8& zC6Dp>U0OsOt%yaj;=*E~zr17PSk5hTZm7O?uigl2#(eMgR#~jW0oCm(Z9sYymAz`%jso;gz7+=??FOH(Ra>?F}%tBzGw|FT|}P<+yG8O?D&!oan7 zKLeIx`|Kgh*?FizODR73uvK66^6Wk=!qJe|;+R{@g zM^R1}YnEFsHEodYj>;`YS2Th!_I<#BP+ydvXH-9oE>8#J(T}IY@rTjL#rWj?;py4< z=!cV|AImK=7V<2+I=aKraBy;YbbfI%J{f#Gy*MAdKN(zZKvd{Uo*r!%Qlpb7R8?dd zvHXm%Cb68`xs;JGDIav2ZROVM)e3!q`Y<}%{H@paYNfSSVNA(zmgKRJLNbn3?15@L)H{q$mqoIx8+2Xd zl1`PFP;{zo(v;CW88j^zF23h1sPSS9;ss8fDz0=V>&~$@*IX7(>Fhm;ZfmG!sU=WK z8qP#nJo;dHgIv`3R#BGDpVK_mGDyUkWG?d^xI7vbANq8GAqq83CRm}VXuZR#hJ!RA zbdJQA^KOcv2Bn#)^DAk9ES4j5S?KB9$nx_DIn`R+Jl?B37P0H15SMd~V$OUoNw>_) zlu$qBSO7RE0;owqAGXH;!kwcUy&of_IlM!zHuAqkgp^v@}bgFkv^lu_gv z#anH92D-_b*ZjX?s%`qt z2Aj?dN+%#WOn0$6K}oXHkRKSQ|4>evKV;rv0*Cx@k47{Pm-?nj?x!{$>8Jh_(QewkqDD+0-hBNn4@h)Gf)Uc`R?gkdql7E4dVQky!oInxtMp!Mr59 zf+)_b43WbHax%jLp^Y87BUe=uxwW6STqyeduA0kIU)Z&3*<*EhzLjM{O8-g-G5{CI$$3a?$g>o#uH30zrUk0`TFu@;Y>R@D1R|0;zwN8 z2p3M9p>xai)lL!T&RBI+p!|GvnO8qP%AON@=dEHzwDv zU%s8uL~#Fp2`1h}Mzz)mZzP85tEfOHvN7iT)ChEwACgb*FZMbbHjGX4z<}1%8a8Yg z_Zt#2s;M7ame7~2o`ima_b9*mU5t{~h&E-BY*0AnGG9BnPMr%Qxe~Y$I=u&8-E}AJ ziZ=|?y|iMvlo?uVSKf*j_s^Fp;gw?Z|TbbVj8&;BT2hJD)Oz@{-@JPZ_x^UG3XADyB?`dxfD_i`s3|hIit& zMlCzx+Zg9=&?Dud1BLZ!fG`dw$PI?nXx0&wQd=8Y8{CDD1lB~*??AC8`6h4t|4+W` zzgnsJ|M^>F9w`5}w|7vx|9_yWp8Wp@C>3*D82$2H{y#EH_@PsOD;d2LBHei*rT4FF z@_7L(E01-|?==6J?`wELm=_e;lhf|6Cdm2(P z$Ly@Al9F3WooUD^NslPXA}}RM_IT7>j|w-##&@lyz0i5oz>YK{Mcs!(Dbey~t?B(;HbF?N)B)6lf#E!ok|8PF4BvT|g1(lbAH8mfe zk1pR`oQ(eKY&<+1jsA9iaom8a;m|+zZhyq(ZO8Ywuwcp+E}iUcYF7HPwJofE7@b@^ zCY!NHU-7q*#pA=v!|x79CylOgu1souFuaUYjZ}AMo4vS)?Z45Q)sEGjy=;=6Uk*+# z$KQPz9G{(xPyYMz;_&Elti&@uK5ZIF2f8wdnow<7Gk28=~e(@5<_*mQbE11cTZtKPSJY$Jb5 zsri3ti0Kyw}0;F~nb!Gj( zezpJf{~sQtG_UF*^BR|OXL}5!GIPE(T+y^ZJH^;Y#{osM;5XEw6Y0+5dWP9$nYP`gk+~k8;s&*)uA;=EHQN-LfbD;9c{PRn2Ez{Wq%+i?CZjs5bI( zr2n~vXt%z$#dV}UCge(e=!nMGHsf^GZhif~s@+GzDT@W19-k;KBF=tASGHR=^^kOv nMx6cHZrKarG7r0dR!`xnJe8;NuU7sq00960LZSYG0B!&Pe4SH} From d29a1cc75159b82b287cb3c91db0e168cd21f55a Mon Sep 17 00:00:00 2001 From: Lee Wright <258036@NTTDATA.COM> Date: Tue, 21 May 2024 09:17:27 -0700 Subject: [PATCH 09/21] core update --- .github/workflows/build-push-edtcore.yml | 87 +++--------------------- 1 file changed, 9 insertions(+), 78 deletions(-) diff --git a/.github/workflows/build-push-edtcore.yml b/.github/workflows/build-push-edtcore.yml index 02d2d91f..0b9cb488 100644 --- a/.github/workflows/build-push-edtcore.yml +++ b/.github/workflows/build-push-edtcore.yml @@ -84,17 +84,17 @@ jobs: if: steps.gitops.outcome == 'success' # Only run if the previous step (publish) was successful run: | - echo "Updating helm values to trigger ArgoCD deployment " + echo "Updating ${{ env.BRANCH_NAME }} helm values to trigger ArgoCD deployment " - # Navigate to the directory containing your Helm values file for the environment develop -> DEV, test -> test + # Navigate to the directory containing your Helm values file for the environment cd gitops/charts # Update the Helm values file with the new image tag and version DATETIME=$(date +'%Y-%m-%d %H:%M:%S') # Get current date and time echo "Updating tag apitag: to ${{ steps.short_sha.outputs.SHORT_SHA }}" - sed -i "s/apitag: .*/apitag: dev-${{ steps.short_sha.outputs.SHORT_SHA }} # Image Updated on $DATETIME/" ../deploy/dev_values.yaml - sed -i "s/apitag: .*/apitag: dev-${{ steps.short_sha.outputs.SHORT_SHA }} # Image Updated on $DATETIME/" edt-service/values.yaml + sed -i "s/apitag: .*/apitag: ${{ env.VALUES_FILE }}-${{ steps.short_sha.outputs.SHORT_SHA }} # Image Updated on $DATETIME/" ../deploy/${{ env.VALUES_FILE }}_values.yaml + sed -i "s/apitag: .*/apitag: ${{ env.VALUES_FILE }}-${{ steps.short_sha.outputs.SHORT_SHA }} # Image Updated on $DATETIME/" edt-service/values.yaml # Commit and push the changes git config --global user.email "actions@github.com" @@ -102,85 +102,16 @@ jobs: git add . - git add ../deploy/dev_values.yaml + git add ../deploy/${{ env.VALUES_FILE }}_values.yaml - # Repackage Helm Chart - cd edt-service + # Repackage Helm Chart + cd edt-service helm dependency build git add . - git commit -m "Update Dev API image tag" - git push origin develop # Update the branch name as needed + git commit -m "Update ${{ env.BRANCH_NAME }} API image tag" + git push origin ${{ env.BRANCH_NAME }} # Update the branch name as needed - - name: Update Helm Test Values and Commit - id: helm-test - if: github.ref == 'refs/heads/test' && steps.gitops.outcome == 'success' # Only run if the previous step (publish) was successful - run: | - echo "Updating helm values to trigger ArgoCD deployment " - - # Navigate to the directory containing your Helm values file for the environment develop -> DEV, test -> test - cd gitops/charts - - # Update the Helm values file with the new image tag and version - DATETIME=$(date +'%Y-%m-%d %H:%M:%S') # Get current date and time - echo "Updating tag apitag: to ${{ steps.short_sha.outputs.SHORT_SHA }}" - - sed -i "s/apitag: .*/apitag: test-${{ steps.short_sha.outputs.SHORT_SHA }} # Image Updated on $DATETIME/" ../deploy/test_values.yaml - sed -i "s/apitag: .*/apitag: test-${{ steps.short_sha.outputs.SHORT_SHA }} # Image Updated on $DATETIME/" edt-service/values.yaml - - # Commit and push the changes - git config --global user.email "actions@github.com" - git config --global user.name "GitHub Actions" - - git add . - - git add ../deploy/test_values.yaml - - # Repackage Helm Chart - cd edt-service - - helm dependency build - - git add . - - git commit -m "Update Test API image tag" - git push origin test # Update the branch name as needed - - - name: Update Helm Main Values and Commit - id: helm-main - if: github.ref == 'refs/heads/main' && steps.gitops.outcome == 'success' # Only run if the previous step (publish) was successful - run: | - - echo "Updating helm values to trigger ArgoCD deployment " - - # Navigate to the directory containing your Helm values file for the environment develop -> DEV, test -> test - cd gitops/charts - - # Update the Helm values file with the new image tag and version - DATETIME=$(date +'%Y-%m-%d %H:%M:%S') # Get current date and time - echo "Updating tag apitag: to ${{ steps.short_sha.outputs.SHORT_SHA }}" - - sed -i "s/apitag: .*/apitag: main-${{ steps.short_sha.outputs.SHORT_SHA }} # Image Updated on $DATETIME/" ../deploy/prod_values.yaml - sed -i "s/apitag: .*/apitag: main-${{ steps.short_sha.outputs.SHORT_SHA }} # Image Updated on $DATETIME/" edt-service/values.yaml - - # Commit and push the changes - git config --global user.email "actions@github.com" - git config --global user.name "GitHub Actions" - - git add . - - git add ../deploy/prod_values.yaml - - # Repackage Helm Chart - cd edt-service - - helm dependency build - - git add . - - git commit -m "Update Main API image tag" - git push origin main # Update the branch name as needed - From e9e8b118deb54092a2b53ca7b1c29528a538e3c0 Mon Sep 17 00:00:00 2001 From: Lee Wright <258036@NTTDATA.COM> Date: Tue, 21 May 2024 13:17:06 -0700 Subject: [PATCH 10/21] Merge and updates for kafka connect --- .../workflows/build-push-kafka-connectors.yml | 75 +++++ backend/ApprovalFlow/Startup.cs | 1 - .../DIAMConfiguration.csproj | 6 +- backend/common/Common.csproj | 21 +- backend/jumwebapi/jumwebapi.csproj | 4 +- backend/service.edt/edt.service.csproj | 2 +- .../plr-intake.tests.csproj | 6 +- backend/webapi.tests/pidp.tests.csproj | 6 +- backend/webapi/pidp.csproj | 4 +- integration/kafka-connect/Dockerfile | 4 + .../plugins/amazon-sqs-connector/README.md | 277 ++++++++++++++++++ .../kafka-connect-sqs-1.6.1.jar | Bin 0 -> 34088 bytes 12 files changed, 380 insertions(+), 26 deletions(-) create mode 100644 .github/workflows/build-push-kafka-connectors.yml create mode 100644 integration/kafka-connect/Dockerfile create mode 100644 integration/kafka-connect/plugins/amazon-sqs-connector/README.md create mode 100644 integration/kafka-connect/plugins/amazon-sqs-connector/kafka-connect-sqs-1.6.1.jar diff --git a/.github/workflows/build-push-kafka-connectors.yml b/.github/workflows/build-push-kafka-connectors.yml new file mode 100644 index 00000000..8e086195 --- /dev/null +++ b/.github/workflows/build-push-kafka-connectors.yml @@ -0,0 +1,75 @@ +name: diam-kafka-connectors + +on: + push: + branches: [develop,test] + paths: + - "integration/kafka-connect/**" + - ".github/workflows/build-push-kafka-connectors.yml" + workflow_dispatch: +env: + IMAGE_NAME: diam-kafka-connectors + WORKING_DIRECTORY: ./integration/kafka-connect + BRANCH_NAME: develop + VALUES_FILE: dev + + +jobs: + build: + runs-on: ubuntu-latest + if: github.event_name == 'push' + + steps: + - uses: actions/checkout@v3 + + - name: Set environment for branch + run: | + if [[ ${{ github.ref_name }} == 'main' ]]; then + echo "BRANCH_NAME=main" >> "$GITHUB_ENV" + echo "VALUES_FILE=prod" >> "$GITHUB_ENV" + fi + + if [[ ${{ github.ref_name }} == 'test' ]]; then + echo "BRANCH_NAME=test" >> "$GITHUB_ENV" + echo "VALUES_FILE=test" >> "$GITHUB_ENV" + fi + + if [[ ${{ github.ref_name }} == 'develop' ]]; then + echo "BRANCH_NAME=develop" >> "$GITHUB_ENV" + echo "VALUES_FILE=dev" >> "$GITHUB_ENV" + fi + + - name: Extract branch name + shell: bash + run: echo "branch=${GITHUB_HEAD_REF:-${GITHUB_REF#refs/heads/}}" >> $GITHUB_OUTPUT + id: extract_branch + + - name: Branch name + run: echo running on branch ${GITHUB_REF##*/} + + - name: Branch name + run: echo running on branch ${GITHUB_REF##*/} + + - name: Login to Artifactory + uses: docker/login-action@v1 + with: + registry: artifacts.developer.gov.bc.ca + username: ${{ secrets.ARTIFACTORY_USERNAME }} + password: ${{ secrets.ARTIFACTORY_PASSWORD }} + + # Get SHORT_SHA to tag images + - name: Get short SHA + id: short_sha + run: | + echo "::set-output name=SHORT_SHA::$(git rev-parse --short HEAD)" + echo "Short SHA: $SHORT_SHA" + + - name: Build Image + working-directory: ${{env.WORKING_DIRECTORY}} + run: | + docker build -t artifacts.developer.gov.bc.ca/de27-general-docker/${{env.IMAGE_NAME}}:${GITHUB_REF##*/} . + + - name: Docker Push to Artifactory + id: publish + run: | + docker push artifacts.developer.gov.bc.ca/de27-general-docker/${{env.IMAGE_NAME}}:${GITHUB_REF##*/} \ No newline at end of file diff --git a/backend/ApprovalFlow/Startup.cs b/backend/ApprovalFlow/Startup.cs index b2fcacb1..e2747715 100644 --- a/backend/ApprovalFlow/Startup.cs +++ b/backend/ApprovalFlow/Startup.cs @@ -101,7 +101,6 @@ public void ConfigureServices(IServiceCollection services) } - services .AddAutoMapper(typeof(Startup)) .AddKafkaConsumer(config) diff --git a/backend/DIAMConfiguration/DIAMConfiguration.csproj b/backend/DIAMConfiguration/DIAMConfiguration.csproj index 49ded8df..be2211aa 100644 --- a/backend/DIAMConfiguration/DIAMConfiguration.csproj +++ b/backend/DIAMConfiguration/DIAMConfiguration.csproj @@ -13,9 +13,9 @@ - - - + + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/backend/common/Common.csproj b/backend/common/Common.csproj index ba2ca7d6..55e056dc 100644 --- a/backend/common/Common.csproj +++ b/backend/common/Common.csproj @@ -9,14 +9,13 @@ - + - + - + - - + @@ -29,20 +28,20 @@ - - + + runtime; build; native; contentfiles; analyzers; buildtransitive - + - - + + - + diff --git a/backend/jumwebapi/jumwebapi.csproj b/backend/jumwebapi/jumwebapi.csproj index b6523a19..8735a59d 100644 --- a/backend/jumwebapi/jumwebapi.csproj +++ b/backend/jumwebapi/jumwebapi.csproj @@ -27,11 +27,11 @@ - + - + diff --git a/backend/service.edt/edt.service.csproj b/backend/service.edt/edt.service.csproj index 68f57830..80895188 100644 --- a/backend/service.edt/edt.service.csproj +++ b/backend/service.edt/edt.service.csproj @@ -14,7 +14,7 @@ - + diff --git a/backend/services.plr-intake.tests/plr-intake.tests.csproj b/backend/services.plr-intake.tests/plr-intake.tests.csproj index 3a1cddb5..3de2e3b1 100644 --- a/backend/services.plr-intake.tests/plr-intake.tests.csproj +++ b/backend/services.plr-intake.tests/plr-intake.tests.csproj @@ -11,9 +11,9 @@ - - - + + + diff --git a/backend/webapi.tests/pidp.tests.csproj b/backend/webapi.tests/pidp.tests.csproj index 24c49275..090c64ff 100644 --- a/backend/webapi.tests/pidp.tests.csproj +++ b/backend/webapi.tests/pidp.tests.csproj @@ -10,9 +10,9 @@ - - - + + + diff --git a/backend/webapi/pidp.csproj b/backend/webapi/pidp.csproj index b20e0e12..3bcb571f 100644 --- a/backend/webapi/pidp.csproj +++ b/backend/webapi/pidp.csproj @@ -14,8 +14,8 @@ - - + + diff --git a/integration/kafka-connect/Dockerfile b/integration/kafka-connect/Dockerfile new file mode 100644 index 00000000..5cdb8894 --- /dev/null +++ b/integration/kafka-connect/Dockerfile @@ -0,0 +1,4 @@ +FROM registry.redhat.io/amq7/amq-streams-kafka-32-rhel8:2.2.0-7 +USER root:root +COPY ./plugins/ /opt/kafka/plugins/ +USER 1001 \ No newline at end of file diff --git a/integration/kafka-connect/plugins/amazon-sqs-connector/README.md b/integration/kafka-connect/plugins/amazon-sqs-connector/README.md new file mode 100644 index 00000000..ca403cc1 --- /dev/null +++ b/integration/kafka-connect/plugins/amazon-sqs-connector/README.md @@ -0,0 +1,277 @@ +# kafka-connect-sqs + +The SQS connector plugin provides the ability to use AWS SQS queues as both a source (from an SQS queue into a Kafka topic) or sink (out of a Kafka topic into an SQS queue). + +## Compatibility matrix + +|Connector version|Kafka Connect API|AWS SDK| +|:---|:---|:---| +|1.4|3.1.1|1.12.241| +|1.5|3.3.2|1.12.409| +|1.6|3.4.1|1.12.669| + +Running the connector on versions of Kafka Connect prior to 3.0 is not recommended. + +## Building the distributable + +You can build the connector with Maven using the standard lifecycle goals: +``` +mvn clean +mvn package +``` + +## Source connector + +SQS source connector reads from an AWS SQS queue and publishes to a Kafka topic. + +Required properties: +* `topics`: Kafka topic to be written to. +* `sqs.queue.url`: URL of the SQS queue to be read from. + +Optional properties: +* `sqs.region`: AWS region of the SQS queue to be read from. +* `sqs.endpoint.url`: Override value for the AWS region specific endpoint. +* `sqs.max.messages`: Maximum number of messages to read from SQS queue for each poll interval. Range is 0 - 10 with default of 1. +* `sqs.wait.time.seconds`: Duration (in seconds) to wait for a message to arrive in the queue. Default is 1. +* `sqs.message.attributes.enabled`: If true, it gets the SQS MessageAttributes and inserts them as Kafka Headers (only string headers are currently supported). Default is false. +* `sqs.message.attributes.include.list`: The comma separated list of MessageAttribute names to be included, if empty it includes all the Message Attributes. Default is the empty string. +* `sqs.message.attributes.partition.key`: The name of a single AWS SQS MessageAttribute to use as the partition key. If this is not specified, default to the SQS message ID as the partition key. + +### Sample connector configuration + +```json +{ + "config": { + "connector.class": "com.nordstrom.kafka.connect.sqs.SqsSourceConnector", + "key.converter": "org.apache.kafka.connect.storage.StringConverter", + "name": "my-sqs-source", + "sqs.max.messages": "5", + "sqs.queue.url": "https://sqs..amazonaws.com//my-queue", + "sqs.wait.time.seconds": "5", + "topics": "my-topic", + "value.converter": "org.apache.kafka.connect.storage.StringConverter" + }, + "name": "my-sqs-source" +} +``` + +### Sample IAM policy + +Ensure the authentication principal has privileges to read messages from the SQS queue. + +```json +{ + "Version": "2012-10-17", + "Statement": [{ + "Sid": "kafka-connect-sqs-source", + "Effect": "Allow", + "Action": [ + "sqs:DeleteMessage", + "sqs:GetQueueUrl", + "sqs:ListQueues", + "sqs:ReceiveMessage" + ], + "Resource": "arn:aws:sqs:*:*:*" + }] +} +``` + +## Sink connector + +SQS sink connector reads from a Kafka topic and publishes to an AWS SQS queue. + +Required properties: +* `topics`: Kafka topic to be read from. +* `sqs.queue.url`: URL of the SQS queue to be written to. + +Optional properties: +* `sqs.region`: AWS region of the SQS queue to be written to. +* `sqs.endpoint.url`: Override value for the AWS region specific endpoint. +* `sqs.message.attributes.enabled`: If true, it gets the Kafka Headers and inserts them as SQS MessageAttributes (only string headers are currently supported). Default is false. +* `sqs.message.attributes.include.list`: The comma separated list of Header names to be included, if empty it includes all the Headers. Default is the empty string. + +### Sample connector configuration + +```json +{ + "config": { + "connector.class": "com.nordstrom.kafka.connect.sqs.SqsSinkConnector", + "key.converter": "org.apache.kafka.connect.storage.StringConverter", + "name": "my-sqs-sink", + "sqs.queue.url": "https://sqs..amazonaws.com//my-queue", + "sqs.region": "", + "topics": "my-topic", + "value.converter": "org.apache.kafka.connect.storage.StringConverter" + }, + "name": "my-sqs-sink" +} +``` + +### Sample SQS queue policy + +Define a corresponding SQS queue policy that allows the connector to send messages to the SQS queue: + +```json +{ + "Version": "2012-10-17", + "Id": "arn:aws:sqs:us-west-2::my-queue/SQSDefaultPolicy", + "Statement": [ + { + "Sid": "kafka-connect-sqs-sink", + "Effect": "Allow", + "Principal": { + "AWS": "" + }, + "Action": "sqs:SendMessage", + "Resource": "arn:aws:sqs:us-west-2::my-queue" + } + ] +} +``` + +### Sample IAM policy + +Ensure the authentication principal has privileges to send messages to the SQS queue. + +```json +{ + "Version": "2012-10-17", + "Statement": [ + { + "Sid": "kafka-connect-sqs-sink", + "Effect": "Allow", + "Action": [ + "sqs:SendMessage" + ], + "Resource": "arn:aws:sqs:*:*:*" + } + ] +} +``` + +## AWS authentication + +By default, the connector uses the AWS SDK `DefaultAWSCredentialsProviderChain` to determine the +identity of the connector. This works well in simple scenarios when the connector gains privileges +granted to the Kafka Connect worker (i.e., environment variables, EC2 instance metadata, etc.) + +When the identity of the connector must be separate from the worker, supply an implementation of +`sqs.credentials.provider.class` in the worker's classpath. There are two implementations directly +included within this library: + +- `com.nordstrom.kafka.connect.auth.AWSUserCredentialsProvider` +- `com.nordstrom.kafka.connect.auth.AWSAssumeRoleCredentialsProvider` + +### AWSUserCredentialsProvider + +Use this credentials provider to cause the connector to authenticate as a specific IAM user. + +Required properties: +* `sqs.credentials.provider.class`: Must be `com.nordstrom.kafka.connect.auth.AWSUserCredentialsProvider` +* `sqs.credentials.provider.accessKeyId`: AWS access key of the IAM user +* `sqs.credentials.provider.secretKey`: AWS secret key of the IAM user + +### AWSAssumeRoleCredentialsProvider + +Use this credentials provider to cause the connector to assume an IAM role. + +Required properties: +* `sqs.credentials.provider.class`: Must be `com.nordstrom.kafka.connect.auth.AWSAssumeRoleCredentialsProvider` +* `sqs.credentials.provider.role.arn`: ARN of the IAM role to assume +* `sqs.credentials.provider.session.name`: A session name specific to this connector + +Optional properties: +* `sqs.credentials.provider.external.id`: An [external identifier](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user_externalid.html) used when assuming the role + +The IAM role will have a corresponding trust policy. For example: + +```json +{ + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Principal": { + "AWS": "arn:aws:iam:::root" + }, + "Action": "sts:AssumeRole", + "Condition": { + "StringEquals": { + "sts:ExternalId": "my-external-id" + } + } + } + ] +} +``` + +## Running the demo + +### Build the connector plugin + +Build the connector jar file: + +```shell +mvn clean package +``` + +### Run the connector using Docker Compose + +Ensure you have `AWS_ACCESS_KEY_ID` and `AWS_SECRET_ACCESS_KEY` environment variables exported in your shell. Docker Compose will pass these values into the `connect` container. + +Use the provided [Docker Compose](https://docs.docker.com/compose) file and run `docker-compose up`. + +With the [Kafka Connect REST interface](https://docs.confluent.io/current/connect/references/restapi.html), verify the SQS sink and source connectors are installed and ready: `curl http://localhost:8083/connector-plugins`. + +### AWS + +The demo assumes you have an AWS account and valid credentials in ~/.aws/credentials as well as +setting the `AWS_PROFILE` and `AWS_REGION` to appropriate values. + +These are required so that Kafka Connect will have access to the SQS queues. + +### The flow + +We will use the AWS Console to put a message into an SQS queue. A source connector will read messages +from the queue and write the messages to a Kafka topic. A sink connector will read messages from the +topic and write to a _different_ SQS queue. + +``` + __ | s | | k | | s | +( o> chirp ---> | q | ---> | a | ---> | q | +///\ | s | | | f | | | s | +\V_/_ |_____| | |_____| | |_____| + chirps-q | chirps-t | chirped-q + | | + | | + source- sink- + connector connector +``` + +### Create AWS SQS queues + +Create `chirps-q` and `chirped-q` SQS queues using the AWS Console. Take note of the `URL:` values for each +as you will need them to configure the connectors later. + +### Create the connectors + +The `source` connector configuration is defined in `demos/sqs-source-chirps.json]`, The `sink` connector configuration +is defined in `demos/sqs-sink-chirped.json`. You will have to modify the `sqs.queue.url` parameter to reflect the +values noted when you created the queues. + +Create the connectors using the Confluent CLI: + +```shell +curl -XPOST -H 'Content-Type: application/json' http://localhost:8083/connectors -d @demos/sqs-source-chirps.json +curl -XPOST -H 'Content-Type: application/json' http://localhost:8083/connectors -d @demos/sqs-sink-chirped.json +``` + +### Send and receive messages + +Using the AWS Console (or the AWS CLI), send a message to the `chirps-q`. + +The source connector will read the message from the queue and write it to the `chirps-t` Kafka topic. + +The `sink` connector will read the message from the topic and write it to the `chirped-q` queue. + +Use the AWS Console (or the AWS CLI) to read your message from the `chirped-q` diff --git a/integration/kafka-connect/plugins/amazon-sqs-connector/kafka-connect-sqs-1.6.1.jar b/integration/kafka-connect/plugins/amazon-sqs-connector/kafka-connect-sqs-1.6.1.jar new file mode 100644 index 0000000000000000000000000000000000000000..7e8e75ad8d2cb7f58765844687cd9c98d9dc8cd7 GIT binary patch literal 34088 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 Date: Tue, 21 May 2024 13:24:35 -0700 Subject: [PATCH 11/21] docker update --- integration/kafka-connect/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/integration/kafka-connect/Dockerfile b/integration/kafka-connect/Dockerfile index 5cdb8894..22564072 100644 --- a/integration/kafka-connect/Dockerfile +++ b/integration/kafka-connect/Dockerfile @@ -1,4 +1,4 @@ -FROM registry.redhat.io/amq7/amq-streams-kafka-32-rhel8:2.2.0-7 +FROM registry.redhat.io/amq-streams/kafka-34-rhel8:2.5.1-5 USER root:root COPY ./plugins/ /opt/kafka/plugins/ USER 1001 \ No newline at end of file From c6156a793523cefd14ad89cd8a3019a216f9fd19 Mon Sep 17 00:00:00 2001 From: Lee Wright <258036@NTTDATA.COM> Date: Tue, 21 May 2024 13:34:32 -0700 Subject: [PATCH 12/21] login to rh --- .github/workflows/build-push-kafka-connectors.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/.github/workflows/build-push-kafka-connectors.yml b/.github/workflows/build-push-kafka-connectors.yml index 8e086195..e4a61a1d 100644 --- a/.github/workflows/build-push-kafka-connectors.yml +++ b/.github/workflows/build-push-kafka-connectors.yml @@ -64,7 +64,15 @@ jobs: echo "::set-output name=SHORT_SHA::$(git rev-parse --short HEAD)" echo "Short SHA: $SHORT_SHA" + - name: Login to RHEC + uses: docker/login-action@v1 + with: + username: ${{ secrets.REDHAT_USER }} + password: ${{ secrets.REDHAT_PASSWORD }} + registry: registry.redhat.io + - name: Build Image + working-directory: ${{env.WORKING_DIRECTORY}} run: | docker build -t artifacts.developer.gov.bc.ca/de27-general-docker/${{env.IMAGE_NAME}}:${GITHUB_REF##*/} . From 85472773b1f9bd0f951a4f55831804bca4ab7816 Mon Sep 17 00:00:00 2001 From: Lee Wright <258036@NTTDATA.COM> Date: Tue, 21 May 2024 13:37:47 -0700 Subject: [PATCH 13/21] token var --- .github/workflows/build-push-kafka-connectors.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-push-kafka-connectors.yml b/.github/workflows/build-push-kafka-connectors.yml index e4a61a1d..9731e3d5 100644 --- a/.github/workflows/build-push-kafka-connectors.yml +++ b/.github/workflows/build-push-kafka-connectors.yml @@ -68,7 +68,7 @@ jobs: uses: docker/login-action@v1 with: username: ${{ secrets.REDHAT_USER }} - password: ${{ secrets.REDHAT_PASSWORD }} + password: ${{ secrets.RH_TOKEN }} registry: registry.redhat.io - name: Build Image From aa5c8ce26f6a2bfbc445d3ba1e5611e8d2bb0a66 Mon Sep 17 00:00:00 2001 From: Lee Wright <258036@NTTDATA.COM> Date: Tue, 21 May 2024 13:53:57 -0700 Subject: [PATCH 14/21] move login --- .github/workflows/build-push-kafka-connectors.yml | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/.github/workflows/build-push-kafka-connectors.yml b/.github/workflows/build-push-kafka-connectors.yml index 9731e3d5..3ec70c9a 100644 --- a/.github/workflows/build-push-kafka-connectors.yml +++ b/.github/workflows/build-push-kafka-connectors.yml @@ -50,12 +50,6 @@ jobs: - name: Branch name run: echo running on branch ${GITHUB_REF##*/} - - name: Login to Artifactory - uses: docker/login-action@v1 - with: - registry: artifacts.developer.gov.bc.ca - username: ${{ secrets.ARTIFACTORY_USERNAME }} - password: ${{ secrets.ARTIFACTORY_PASSWORD }} # Get SHORT_SHA to tag images - name: Get short SHA @@ -77,6 +71,14 @@ jobs: run: | docker build -t artifacts.developer.gov.bc.ca/de27-general-docker/${{env.IMAGE_NAME}}:${GITHUB_REF##*/} . + + - name: Login to Artifactory + uses: docker/login-action@v1 + with: + registry: artifacts.developer.gov.bc.ca + username: ${{ secrets.ARTIFACTORY_USERNAME }} + password: ${{ secrets.ARTIFACTORY_PASSWORD }} + - name: Docker Push to Artifactory id: publish run: | From 868b375d2a705838f36d6dbc131fe49af6c666bf Mon Sep 17 00:00:00 2001 From: Lee Wright <258036@NTTDATA.COM> Date: Wed, 22 May 2024 09:05:52 -0700 Subject: [PATCH 15/21] force update --- .../kafka-connect/plugins/amazon-sqs-connector/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/integration/kafka-connect/plugins/amazon-sqs-connector/README.md b/integration/kafka-connect/plugins/amazon-sqs-connector/README.md index ca403cc1..395cad4c 100644 --- a/integration/kafka-connect/plugins/amazon-sqs-connector/README.md +++ b/integration/kafka-connect/plugins/amazon-sqs-connector/README.md @@ -2,6 +2,8 @@ The SQS connector plugin provides the ability to use AWS SQS queues as both a source (from an SQS queue into a Kafka topic) or sink (out of a Kafka topic into an SQS queue). +Update jar 5-22 + ## Compatibility matrix |Connector version|Kafka Connect API|AWS SDK| From de3ff1fc49163df6ab208dfe386a2311e84c5f18 Mon Sep 17 00:00:00 2001 From: Lee Wright <258036@NTTDATA.COM> Date: Wed, 22 May 2024 09:25:45 -0700 Subject: [PATCH 16/21] test --- .../plugins/amazon-sqs-connector/README.md | 2 +- .../kafka-connect-sqs-1.6.1.jar | Bin 34088 -> 33957 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/integration/kafka-connect/plugins/amazon-sqs-connector/README.md b/integration/kafka-connect/plugins/amazon-sqs-connector/README.md index 395cad4c..3293d229 100644 --- a/integration/kafka-connect/plugins/amazon-sqs-connector/README.md +++ b/integration/kafka-connect/plugins/amazon-sqs-connector/README.md @@ -2,7 +2,7 @@ The SQS connector plugin provides the ability to use AWS SQS queues as both a source (from an SQS queue into a Kafka topic) or sink (out of a Kafka topic into an SQS queue). -Update jar 5-22 +Update jar 5-22-2 ## Compatibility matrix diff --git a/integration/kafka-connect/plugins/amazon-sqs-connector/kafka-connect-sqs-1.6.1.jar b/integration/kafka-connect/plugins/amazon-sqs-connector/kafka-connect-sqs-1.6.1.jar index 7e8e75ad8d2cb7f58765844687cd9c98d9dc8cd7..546c04b0484b4adc96186d3acf81014e8d308347 100644 GIT binary patch delta 14003 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 delta 14117 zcmZ9zWl$bV*ENj0yA#~qJ$P_}ySux?1P?A3uEE{i2~Kc#cY?cxd^tH!y?32&YN}TE zw%+rnr+e-0q6mo6NC;$QIY=l3FfceUFebyM1Y}Cce}MA~B;y}wA^i(0bpHSd8l2@X z@__UFMQ3oqzgP<{@E0$@h5m5{F+XFGA5Xk-N8UIL z=`01GB5R#Qv{@pmrRESE=cg-B_Q?zb6(qqC;9UWfmoWbYQNz-j_JX5thjADPgm>{I z8y`nJYtAsn&gm_BMQb0eXNtc~vBDKyBv*k14$QhB=`HBficGi<(Qra2{1>EZTMmuf zZCh)Uq8gvxW}NonjA7>3O5hmQ@!d31CvM(W7f%u_gZ07>=ry)s<~;PfjpQlD z73#975+EHa)s&0#iLgVsGy%$Ba-x~nyLc9>v)O`QYvejL0clQM0=Jw|fm&*)8ZFOZ zg~AnTYKZ3iooijNe+KpCUxik!P_IOXfSY!+@%Q0X3n5r9G|G<5{4AH2E*6O_j0KoB zEK%p$kaq~XT9_Xu1=lH;ub^bzTuYMf^BYW-5FV}Z2HJN$uRdG zi%$(aKdhVMPYei6eU#}393=enzOZ0?Sl?IFltRIxd|y>}gHxR{Y2pco5H}XW+Q5hB zuO-e#=%n{BqRG3FoyLM;V|4b6WD}iOV(g8GcYJ%5|X{&un~AKjt05OU^2kCLaUGhJqh+6^(~m zBf~bXUBZ2-@&d#aw?SS}rK~`&Znb%5lXck6&pCpE%AYw}Y8)BjeF6{=u%q%0Na4X5 zER-CxwUOvfA-cRzIhk?|cG%LS>dr`)M^!7a4hzVKlM4g;Mdryk`EJXCqoTkOMzBJcVM%#2c?-jDw$mr{v)95>;144gC4qw z2+qkfeYd2|iIk{MD@gSBAR{5ecgVdnd_ zarYYNjAk*?C!toc!V8_HZVk3E2X6_!MUQX2%d`2Seh)jPOtu^Vv?@%ahUCvtUr@%5 zzADAte9U@*-JPGpSl3ou17$zqdoVOBB!5%EUVv?)7dKsk!-F`rRQDq>G~$x~C^TPv z?_5ZDoM~ zoN$&Yv`b#~T;mFWF_uYu2^O_rrq!fezy(GQw8&xF$Ky|Cku_zkri!Wwg5`c8EiMuu6zEu;n{SUN4MKW`wrHOsB73kegc!IMG3{X1refuy zBZrKX;ci{Ad(irLi*Dvz!jfbvUy8KuA4BX%L+w@5KJW9`2A&|$nmmb=KheB#xDv`} zi}5CjqfG&d9t3YAtQWmCS2YOl3WGgScLMG%KcqsHIn$ew1>Qkj^yr}2n09KSu0HH2 zC=jT>=BkzWcYo{;XDX~xSB0S(VIiX-wr8x#cYr>C>BolHhSd&^`gcb-+Y+;-F}Jy{ zEBiA{AfRGbAELyDLT;4oN6cMH@tC4F(atOR&N2{BV?;x^G@N2Zf`aa-nkO4cOBYE) z=fI5{Rl}j?^0j7iv?jChqaAJOtGWLPJS+Dnb!+MglNbU}7AA}fm{f6T+c$Fa)btf= z6ivxl^5hgRbz)sm3}ymisD5dPEOti4tl&&ZW!uZ#xYPuiY-DvZwXw(URXiDjReo@v&G5wK_Uw}}l^k7qzgVw#ajw?q3xaZo5 z&*W@?Gh)92ca`!9OnZVjJO>p*eAbJl!+~{?ta*Mi5ce}?QL5 -t+D7#94Xrurk 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 Date: Wed, 22 May 2024 09:34:07 -0700 Subject: [PATCH 17/21] jar update --- .../kafka-connect-sqs-1.6.1.jar | Bin 33957 -> 33996 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/integration/kafka-connect/plugins/amazon-sqs-connector/kafka-connect-sqs-1.6.1.jar b/integration/kafka-connect/plugins/amazon-sqs-connector/kafka-connect-sqs-1.6.1.jar index 546c04b0484b4adc96186d3acf81014e8d308347..4aa746ad41da0509f8f318880bed60ff1abba792 100644 GIT binary patch delta 2554 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 T3OksOk`g1t9TKwl10eqc$D60w delta 2520 zcmZA3c{r5o8wc(JF zjxC9-F(opivcw^geF?|wx_wv) z^6Ly&^u({Uyw7?_$}j|$z!+}3%Ysf^{fphvTp)^ecV`EVcf zWI@)57kE#{-d@XtJ?N<%`f^Zdt+mYNv<1FYYbM39T*&{_)rj|1GPai2N%p&SzImTx zq`HM2{0~Hi+3MDd>GnE77z!3Co{#sGeBCo&b5NVslU(9jKNdYY2lsvU&^$49D2}?_ z#OPd61?4IB%cS$mJ(g@0vIu`=b&`Fy(ELH2?vNmfSA@OpSi~QlFM8ltgisqGY>PQu zA>Ns0wk+8!pE~u-=nB1w2UOq?YaoMDB|dy_D$~2YqKn*i3frzrG|iaHpe0L~3TLb` z5RF^$6Lty{gBNE-xPs7EWfF-)gVfc|U5H*AQ8JD>i?IQ@nJ?l}PIW1A_*f8ps#E%~ z##X8@#%N=kd*q0?N?e4#tjyUG^Dc|X$OLEF@B{gpKC><*UO_0j&bOUpSi@T?MI&8v z;#LX0M$qIuXh9|0$K5tG?f)E}yo7kl;rCws8jOrOV_JNWM(&K|6DYZXRTIQJI6D;$ft@09_-c zfa{-(D~cWAe$Y_A`#+(7?kb0$g*T#CY{@|DTAtlQqm6~9leu?#QDwMt{nE#jH{%&Hp2dbH3>JuB(Z)oXP! z`yLq|QxsNY(S`rW!LN#C6iV6U@lOw#cJZj2-znol==J`l?qBFx7>Psv)^vH~dDY;# zfXd&KV|48n!Ht|JXWCM1S5;flunu94k>NAaFJr5?JxX$;{b{d0nou4xFI#V#S{Cd# z-8mUutwFdXGJWCx=Hi3=KO1+%heOi0brOF+EB1@c!u(^C8?iRhHX`qLpX{>j|9qiF z66va*B*YSdJ%P2hxDlC3ZqR4zGS-it(3SsFcR+ox zKYJ0{)C7%B^@) zq`cQ?dUDbn;z-$%_9>FPne)w)FR2XC(Lf2PP@BByzCo?99Nx{2%!!+zxSNu^SA1t< zKaER=Gkx-qPeNjNcvOc+q#!8&zd8zqgx!l9=X{xb@bz~wdqWLYtrZ2V=B<6NjiqmU z{aaZkz8h=1Hq+XiYfns?1EvFnKOk)cl=X{fvd3bN`LhbKBI(52SZB%f+B0o|-zy+)>37hH3-lL$LRy4c6V}VhvbS6J&sko^VDZs?c6weMf)s0KWfq?shWpx)St_8 zHGvOlq$7`qboPRNAbLbUbYwlnIJFg%_A9(>#V+oPs+OeXV7g21esG-Pa~#hed`=$L z{B(c$$H!mQ(uEXPUx{*k%NRtR zOOr+1=6*Q&V?Jf)c-77dE%ezMRIeCVg^l|ShpoHJmS@Pchx!ONb7r`ZoyNX(y>BMw zYb7mDDLZI?5g4k_DE*kK(OdmhDdBR<)ggaJccl$Ho68*t;`&BY^G3v&@xpnya?4v6 zEout|YTr>g3BGAV~P$q_iw)*ZpBreqJFb?sKdlH zMa}m36>QL_%GT>Q;#g@CoaPUYaTEqBuUj{+e^q)jasKCLiiOeMi!%JX;J2p@)y%#$ z>*b$Ix;J|FG`dN2CpE8^aROk+?=_W|Z0}^X;&OsR z#_$SE9rdKDUGr7wvv7g#rA51}J(XJv0{J5%pm13|G=q4#dqp7eJ3NNaDm%o$j|lH( zT%6xrU0$OCGmGHi%))*+v(N^DUIG(GT(BBIOR(Q5E1GL^p-g#I1R#aG0gQ*o060b*_4*>5futIFbRj$P=m;$8sOKF;{QqHv73C@^gKHox j#rpIcfj}Vq;W9m3|NBZKa)M|D-q&a~(PA+3V4(aTwMvK9 From 159246940c6ac6b3165d4dfdc3503d31ac885486 Mon Sep 17 00:00:00 2001 From: Lee Wright <258036@NTTDATA.COM> Date: Wed, 22 May 2024 09:42:19 -0700 Subject: [PATCH 18/21] test --- .../kafka-connect-sqs-1.6.1.jar | Bin 33996 -> 33874 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/integration/kafka-connect/plugins/amazon-sqs-connector/kafka-connect-sqs-1.6.1.jar b/integration/kafka-connect/plugins/amazon-sqs-connector/kafka-connect-sqs-1.6.1.jar index 4aa746ad41da0509f8f318880bed60ff1abba792..5936316c914626879c8c0b1792ad567982652f51 100644 GIT binary patch delta 4429 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

+Z_p!MZm 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 Date: Wed, 22 May 2024 09:56:49 -0700 Subject: [PATCH 19/21] dependency update --- .../kafka-connect-sqs-1.6.1.jar | Bin 33874 -> 19671645 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/integration/kafka-connect/plugins/amazon-sqs-connector/kafka-connect-sqs-1.6.1.jar b/integration/kafka-connect/plugins/amazon-sqs-connector/kafka-connect-sqs-1.6.1.jar index 5936316c914626879c8c0b1792ad567982652f51..5673fd89af08f5be1f567888d9006dbf1d0f8624 100644 GIT binary patch literal 19671645 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 z zH%!0hiorsPGf1p=3Z!F=gyjyoB5%yV@&%ir*th>`Y7e#@^N%t%5z75EOsk_&v*`RG zpojSzl?0V5ZrrJb}GNBgjAyR=>RY4MZ4wSFE}!Bf1PalNUYk*C)V z7%MKLgHQUEzQCWTadS0nRSMr81J46+Td}Jx@u2s&%S{VK+1PmoMScZPuM*6BuzMK6 zE-|Y#gUaFLACbXa{$CYbk`g%y_5hS+iQNdu)!|Y-y@B!as-!I2xp2#ibwJeo>-2YkEY- ztgf~%qLl~M#1t$({#~c7V0u^*>#Kwd^e;(=|I-rg|L%SMxlYlc{_M26fc!x;Od?BK zBTQ+V(d#Sctq@7Say`uzr=(0mUsog{T~I*AuMz59U=RQV|1)l$LpJ8lc7=_9_EpMr zlFZW5YbEt#iSWhj4)NIe5tvOhB6TKHjvg_(|Dw}p)3?p;Ip)Xvz8%oSRtzt5;5L+) z^I3OEuvwWLD}dK_{8rbq)pV{3yR^)Bwf3aA{Zy~ad7YNqrisQ3BzJd4c-`7ObQ}#9 z)2S{|<{>ZGWWxcMIv=2-zK_p1USwRysw5AthOL<$stBft&x<_Eqy?XeFCV!c0g3-8 zYTp&TzLdXx4E#_{|1vE(%kh55CPM+C&-G(ogH_39vtG$b%*x2xf^ugG_fG&1L5~3Z z;RS!(sAKPJbupWM*;rwA)fhm!@XoqXBz5@HZ2~Hji(sLKFvdKTqoB(~!=`jwP)H-l z4%?Mf^+tErwnT@oXx9OcNJN6u>=h@Pyph(nft-B#*9Dlehh{OZ*(tDG?N_SwQKThi(_F%`lye0})%1iBwj`u?pnCv3 z_slV6TeJnszYCGcXuAuhrXcZnqxbFpsGnQJD;gQjlR?U(9h)Zl@tc z#4~9z=nao2+W$q~0RmO|w zA*c%)OC({ZGgU>)UbvE~WN1(No#vvv5KXI5mU;W@BxYn*Gd@sDw#-g<6TiIdmm#Zq zpECJr6-rW>S5$=mZe8g%q|%EWuP>%AhmxVM+TbDA80ZNaqTH2KtBgsu9-SHY&7HGA z`nJ+jdo-gxwMbD!zc+{MFJEZ==q=hc>8_Po>E7EA-lK^3i9#y9`70X1tu`AE9V7sh z*QMOCHSa;7;bJI%mNRHY5mWmw^yHHIg43`-V{P0Xt@Z zmkqGY2Pl*drBxq&Km4$NJP5R53rOndL04*6VK)ub#H?Mu;l#>Nka{K7W0J^4oE9xH z6aS5Z1?e8C9Lg#erS)*Z=W^lC!!*LjeKl8O!$fAdQHrw=xBZpsw~S_rW#i)=vR-sM z%gRaZaTpJ_K;6NUzU=8s+5nXP36j1%SIv~6$Tl`3uQSB;T}_m!7ocfJC-6FGoN()i zS2~m_=8xZTyxbCFJu;bxF+10&E{>ppynFIGcgWDSnsOp@F{A6fbsvv4FbQ)>XOhhl zW>W?3?c+@oI;NhOC0!@n*5`EI6#d3}6avBKoxMSj&-;nH9QeSo&fYG#s7U@LoX_d| zoj}tm(;H#>UE+p=M1H-e(!>!Jajoywc4zwAE>Rc%vIp-=G|V=9!yA;YJZiwC0pY|B z(|GVVvf<8dY~Mh_a-irf$|q|2Csxme`5U@tZvJ=wtdJ{d&lmI!xZZ;)4Kwi@T|94X zYUf>nDh#NMGbqfdD>ePyd^cQq8_tdR17ffAYx>A_oA$0M=J92pNO?F@8DUq#UF87m z>{BamQ>NWppQz1mDc2_YyJnC~6h&`1$5T();kDh`KlY0Z$yA zLp@d06;-s`oV%N*({7S?l;)Rf)H!76SoS|FA&)PSkhh>s!d|8OEMW()PzJ7eYEEQl zuzT##XuA3@RXX6Nk(q)v^_S#Xx6wZA4L`g7CaY?jaTF>1MJOmk`d7ii|CChlzhBq? zl-Ae$O6$*Kf2H-w>XzYYG*pP&*hEl4$9mpXhcq-bRD7lMo9H{VPv^Ee+kWVQM1r)opjZEMteXH+vJhOJ77*8;+rZg3UPBaFmN)b%q zCs;kOWwr6TW)K>F8|aU^?MM;5S{`ehu5C!rjkX+9vrh}3We(ZKrT15`Ci9f(ske?0 zb{&xr0c}X{;EHFGG}p|ONtNUW;I{4y!&{=ym8L{^4xDJ1R>@hFLK*hR@dNJe+|pdl zcrZva66vQMOo_4)U~r(NV+geg?ywXIahT*qw!Ouc5>pzZQo4ktS)8_e>Qw3aNTS=S z*96UBvP#$U1bBw*@Hsy>8F?tQ^TEVbW(_xQ4TQrq){N- zHU41pps+@rE-a|CO72G2XD#5)mM*m<>uc)Uq)U=oUn_iXRT70&LmuI_Sb(jSrFK1@ z%Xo9*ry5#S`HithGRPq%K*F>ts*)woMJaz4g^PO;S%M(wOm(DEBUfF8EN10k6O%gS zs_82&f6ms^N`4-dj-1(1shxx|4^3mW(^)Sb7=Eg1{XLY)$s~8#RJV1u(YAr2{vw3{ z*&@znTWU7)Sj%5_4J>+=o`yjL)9?lhCTa0JlEbQ|o{RJo$ZM~i|9Akl)tI+ecJXmTjJ@xA($fs2p=xYWIk4JE} zXw1mFPGDou=oE2*VIZb9O%e6%ILi-#6%jB;!Z1l7+M+nTPQP5Jn?G=&y};&OiA|cq zeTfU=f~=?Eyz-G3g?Yq(^r2w8wS?2!lar>*^tRT-b7rMNCOtf?{B}fUql=|hXRg?- z*{%<@YTI|h9E}Byh&mADuKd#gvys2Ull$DKqo(5qp2>6xu|0_!gt>Z4Ow|6Qx80x4 z-FaK$p(yYOy?v?dK)W%??nnExvY)%wsuteS6dcnRjOKZ%Q??)Snm8JrJ~i^%uemVC zKjBaW)@1ZplCp@|qkB)r z_CD@Nh}2IB;UU)+LOzBaGY~Dwrva>OmBoWIn(@QjClSJxa4}nTFapIpw@dmO$t)+o zG|L}Zg;<47g;#mBgmVw(D^@w`8|xeOs~uL;4klFpsJYHSXXyIV^ByDPDO{&eZRW+t zr|LupU@0(_>>vdA8uf>2|KgR)LmH{) zQrNAP|KP66aw`9z&YJM53`d1F?b};>xE(a5JW{7tSE-BgX`?KzzkoO7rs@?x`sN^F z^GtO2@c`9fEICQoy-EC7poqux)4L|aPO7=`Rqr+n{o#VS8sp^a6$qbDFJbvp*p$7I zD_cVq3c+V-c=q-eJJV!^K=ReU?~sQtRKLt!ldIjI6cDgG!9J6&_m-xxuVN3m6in8{ z7yPsP{;r(Hmo!F(w=l?~_p+Jo(3%NQHf+oj`mN+C|5rhEL857aKHhp&=@aWmPZaB< zF4I_MerEL=b!kvNl^Tox7Dv*63Y>axw*l76=KS z&HbfNLwMIz(<*Gv^tA2~8w0-Nl zb*SJ*j)h5>9#$!wf=e_-**rf$t5r97AAmp4EN=?ZTBvtra|+_~R2*KxL|T|oI#w~P zFdxNx)gdaHw!Tt`!cu?XDaqTjbFWS6wzfYSs2pa1}Ovs452DcS{ zMKljZYYEL5)d_mw!!Jcmcrh%87K*yT$%4uzUP?9-d`SVvVkQYY$hMf76FbE_du^M! z%B&Z^iP58FU6;ht*T$=9{fMLHC+^nCAg?2crB`XAL$^O3o4o^J0FCZwxbOd~9K~I}1`vc-G@5FtITT94#+x}Kejggdikw1yy-jPVyWNmlI2ghh1G3KCF3Pf^)g0r3 zEvAh}yo1}9q7A+{?tXxy!tCm@Tv7@MI;FP10bE!m3DK`@9Sk_pB+9LLk_n4waEtW= z1{X7-N}~pw08cDQ37n+1=2+b+7?;uJPGGi92gr>Ci_0DvGn87~{Q#Z!TXa$csHhku zx7!(i_HlldZREFCbm`G zH;g>4B$+ujEExDpt6#Zc*4xEIG2&QM!$OM{o!EMl5ZlKzp+AWgD5XjLe?{QlT`>Up7~rQU*?yy+?5m>EsY zy?`lWU;R9PG<9Mz-1Z#FSOwoM(nJ|=WN>9mz!hO12m#}TQ8;*jh9?rRq*sH2M7i>A^Cs6L6@4ps7J4-k7o5HCa2v@iPdXT^)(T#1$UNaZelOa zT0+u=UKF$3bA2};e5c?YVWlwF@k!GyWAT75vG&xdcY?4UHP_8ASq2*@L&QFJLJB;w z`tlhpksa^Yp;Oa9VS zAlp@13$j=meK_C6YD*`*Ac(H_s^eSFxOQf}C{|PZ4Z}W1!Jny^{#h|mU>2XARW^5m z%fcvDd=P-QjtJOKK9QnE(J#{#u+kNnm0Y?8q6jnF0;cLm%w4*bpis)RUeE3ykCF?s zgAOmM%n2t^Jis3i9Zj_cVeD`L+B8AaO+eUQ#Sgg_S|rjtv*!9qcpWYgOWeNqCkX=5 zKI z)F(-F?;^A;KoubD9#ze&M!$J8y;s&1ZQP-B{bxMN+iDF&pccbW>J05rqMt|{aH0w zNob3B=|1hSE=%LrQ!(>+`@}kbd|ObGx7V5M*_CyB9e&VP4!XFf{D5=-&FYVGN9NoH ztVOEZm){K%1iy$r9eHbw<_pd#{o+}AL^OtWafEwzzbveeK228VB15&ZYf%NT=;gz@ zH-xf#q9fjhGQQ%4oO;+XTRAb>Y$-yYIztAztBjxTV%Ej5j`rp%VXZ;^pRCac>ur*Wt%lh9L zT#1Tpa=lDw{1g_#!Y?@m?Sw{Fw1OCoB!SOMJe<8+x6M8dus=cE1@xI>aNzjnN1l32NHnwb#0HZtFR?UOZ#vnLt>gR?0iqF}am+4oMa6XkA zfDx54Hk&tMmrA7h(4~VjTqM4OP9Rvw^IoKtPSopfI97P6l1{X_H+Ma8%(O0S7woXt zTr5LT2wko#IlytypFG40O7cy#4?I>AB&=KJ9ej`5BAvuEKF>cqbl?#PqlSzr1n|3H zuP(uQVKcTWCO0bf$Il`GA=NCDkC-HZT!0a}706Ho1I{eQP1$p10&QR4r_hW1~-fV+)#zm~SsDhGz|q|67X+H9&T zD+Tp(s`aVroCB(t+7~$@D&zbCnSvOb1G*Z>eEIyY>k_ydS41IUz3)0gbc^>fzzOKr zEa7Dx+Bz~ZwV9oGygi>#U_W23^}Flc@eSRR@7?a%e#G&n|JFWi;Kucv;M9GCP{{5u zqWK?DlEkfL;Iuj}?`I)nfvFTGNfedpK&XOBXr5sQxX+PP&^vuvB>Z6GyG)44k<#hS z&r(gkD-ggFFmt5>G4xdqN`<);QcH|vB@%$@Kr>5e%*dZZMHiQwJXzuPsbTL=6&eH= zgg;)EnhjCU$jR@|%EXbFeDk{Hz@;Nx$C_xRh=l2o=eF7Y8#bU!`f4igd4wq= z^rt6p`(Hsty7h@d)((ZVfh?8IrQ@&$>7gA|G#tv~#w2Cb*&t?@TDz_M7w}j@{6wiJ zN%EBjRs8+KOyg%FX?~9>3^E|0f$>y1{;`wzjZ{D!Zzm3bWAPT(;D!0@UZIw zpgdYUT6d1AoInVOl{9wqU{;n_&0T|g96YTLv#_Lubuno@D2;FXT$r;%IqB?5XK z&2gLXoxO&}a0)!6^Dm3&2rSyjrDdL>)pPek>a7NRf)s}E32X6O)v=SaMzWeqt{8o- zgbLKEOl2p37Pt4P_`v!zrnNp(2G=HS@O+q;;HfALC3W5M7eC7_i=gevCHwqMfXVd_D9%zq$I4Bh7;~MQiEv< z%3tvm8_oqdY9wkR0Id5#(@$oK_0Dg6piVLdaV>OkhxQs1d*ger#?uLN5}t~rm5L?6 zxr*ss^sGoKM2pEWKsl6E;9P|K|6A~5W@P#Yxc`VSganErFmz$n!gk6A-#~GJ5J}8t&0bu z7Xx}>hJd0exD3uZKO@j3zGYt4CwlFh=A*o7_D7ouVqiI^1~cX!ZTRDPWR_y<3*L-Z z(z8IsTTPyGaH>$dc81^GLiYlVbGWD3vrGNyZz5K6jwp0!JRKQATh%Aak`8Coqbg71 zSEhK9U<64`6=nYf&qh&@K^f7&jqfyy-zPXG$I~uDSA?4xQuKw~Srt6W*2WlodBhs8 zImsc(tM?5=dJI!4j#`oSfn~F=>C^~_xGeJ?F^fl~_I7rZK#hD}C>(OBwbHk3kfVyo zdmDXROW1c9tsY8LXI|6%(?d3VtmN(NZyXPU7gs5Mt~q3~7J3E2!?VpS5QB2L)b{3} zV_4<29yzWdzXcRYRAK3s0Uk3Xf#IzHUJYVYyG+!e}pxbC@P%&}^t zGKuEKQ-KGAyR7F(VkYSuOPUfTRT6Z&9h8Dg?BOk$@>rJf?0(9ru zeU#Yh;4pq*v*jnI3k?-m%o*(>8?B~I)_czIE{0#7&0m*Oti&nri%c);URE)%nG{&fAq)$D1)z5QAxXbOvw{T1-o~tvp0O9n%pjzY$aS zU3H%Ey*E27PNw|h?SRn%lWgV*Sl%9->d?>Pi@MrnGUVSxoi5=lm`~swE#G1Y`_?Hu z?P6rb@Sp}_W&%ns_t4hy;I}MuN`}kSIbg=u=>w+MTe<@*r<`mV!d|^}VQ!?)!R6NF zwWMr!65_muJz+Zj+%wZ9U5fQ%ThFjcD5NdmaKt(Lp?bIIzV0DpJ&_PbDHKoiV#P;A>b;>zZP;S~UxHm>vqL0{G|Fko0-vW1`z0ZBbQXbCSK8GI^)^sv zS11^}>zX095hqg}tJlq@!;ZiGF(YR7{WuG6WA$4;!$sm}wX|C&^;4Pcx@SXO6*a$I zU}qV%7oIs`xy%n-PbpN-0Wf?X2A}D)e2JuDjjmB2mHpJENBu0Tz^skc)l=u<@~XA7 zcbn4q$G!F0QESRN?=+{j;{4~A)UI?7uVpp5H35#OvR9>Bu$rH!Lzm~esqZWXr>I#A zm_R?NM0jTPzYX1>MjYS?Id&#En8ye2cAJllm9UE zR~+|Y)4-7XO!nSaR@~B6H&Xj}VAi1CS>UD;@ zDv@?+C9L`4n;%-rIak)3CEMCB!^stUi`3I6pHbZ=A@O75d<;A8*zX;?A+EhJzdw?! zt+mrv)$%XBvd#vh6wjKYtV(x6no33KdscJ5!PsgVp7ljvBJY?KI&H4hD1Anw_E$8V z6o`K3@?HcB-!NY?K4CU*%U zNN-|#O&6(fxEdOFBPArrEhM))(pS16Lt^FPUaNe}+jQom%6G)66<7QH99QiZ(TREO z0K=@-HI<3~>iLEg&Z$<`dUK0Iws)f%rKI%rhQUSGtenfc;!?6cS6Kup1+109Zq+~mow_q@@;wru zQuV~K(bE)1_y)0!aLm^2;@U~En_FDuQHg7XK3Q{F1~RE;)E6iY%Jt+I)B}=6?O&C; zyHw0MXZ+$o&u1W~?C`@B**i0?j|Bc~IWdo5b`_M;m%sI&F*QGCD}438Cw)m1{nu`f z=wF>zbAX}szd4=!uQbSCZuB26@$Y`^KfK95>|%*%wmC6swDy1`=}j8}W2!FBtel$}w`!S7B77QLgVj|!k~rL?orLz;FETcSXJV%W>>4F&h6dYmwPG=B0t{gV3^8rJejH2i=0}03mxGbo|mI4v%a%qrLZ*$NqKKNkoT82txSVU@bL{N^yKM*peKC9-2{#Z z^R%p*WNgKK!2rJ&B}JwIC!em9AjyvG`3<^uc2%kYWdvOXURCvrxn<;vD**1Pf_H z84KxLjw|HlS&4U9a9LPZ4AT&O1q6ERS8=E20@a}UTcCwYlLEHik*-;@Hn6=v6}4C7 zj2vD0JgAvl5>hg7<@MxbieUMqe5Ix#j)Rro(Jh?vUqD0;iEmV2-u>%q6n&y~;n|g= zd=V8j1~X2Ci`OtH7MKf(W~s}wH4p5VqM~Xlyd^8T{DUYO+9iM5BKy#C1+8lIErL0S z2Goaq*Rv_~3*ZuAGP7`V+LJ!kl_9c0U(P$!+x_U~L5n>wTQk3K5N|NFS4v0V^5!!M8U6XIWa1n&RA3I4|&E^O`M z3> z_e~h2bnRI&bXj(e%JL@+AzzhU=QH2Ur2eKHaC=`q&IQ}|X6@b%oC{Q(usSvJKhMy) z>&FPuPppF;Qxq4x#sztq>tw&-Tr9cw^pLYYfEUtD;aAxRAgXLyTgWRa>X7Zw)0rr& z-6lxeKo4hASmg$21P*$Qqs@G-o2}yoVcB5Elz8W;x385BT9zI&B=zUqAa9}Ak{M2rXc>u2EWwV@jJddaTt6fo>1$jEM6N*Nr{rAUv?_ zw>+V*>Z2s0%b_A({kq!uwjiOAj<}4AFPW-vZc*Ngv8`0xrjH%~)gMOE15nvdUL-5a zVYr6D*+H$$p-wH|dF)f`Tj&Z9@Dbe?57SL-I|9?oCx5J}#XO zqQTCV4*uwAR%YQSPQfPKb`7)qg!l{Ok29glRDR_~^S(Ze|N5HvE4lgKx%I#JOaJ^S zs7O2EiXwdstjt#?H|&bF7^91__ zB&P#~NthEpR9cYZIO4Y{qUap65TOrFjgWTy?Ah8?)h7Nrs6XioX^;L$pV7A(Fm)Xr zL{@ooo#uB6u>o)z=%G8HLu0nv3I>Pelx-h;1!0V6Ut_5;QS^V5_3nPH4MX(k8lQ;s z;{_R3a7`H%iuvV{2+Kr$xPlIdu{(?~Pw$wLk zE>#pQXuuH$_#Fan#`P}{;M-HzDQ8dyDMV1se6KL);8CZp6RGSWxq`>O3R^z1B%=d? z`<#w%fISo}IJaT&VDl<=^}QsTpAbTk@XHo=j~`cI{^#B`{5sMAvyUhFJLNJ5NpD~^N{FF^|;ncYSgam)yIp0HRJPDX zjUE|A$oxMk6|an2$HUBOTLz~Z&ex=sHib#Vy9jeB8|zx|%{S{3y?}j!zF4oXz`KgenHJ!fO#MTrBC?bdl6U20p*lLm#F@ld$a(^*XrhC#CQk7BGp^2LpSGi zpZUY;1-Gk}l=WVu!&5_dviaVc8e|AhtilS!$a}wQEUpbmxib*b&6%0rzR8*-X!bL} zjAMF=v_?0+%AAL~Hv59BsA$JM=U<21xyDd7^y`3c|4YyRKf!MQ8NI1^*#8H1Q?`;{ zF+lUxqe7EX6={!N&%o@q=s&h)qBLe;Mv?g4n&MOTTd1KCB7F2?zE32XUi+<`u;Hw| zfjP$nnw&etX~HSX$?Eg%{TjEMWg~=mt2EGqE))wrR|2b#1QVMfsmDDS08Q&oAS6R# z9ZcB{MLcmoiWJ=9OTNP{tU!NhjlO`Lkf&Qkvl6COdOQ;AYF|K&zFK=1o7m#C{z=7SDIb&M-RwMFR5^!8tvqS{M|s@(1U|UXr0mf;*Wkwj zHbi)EVRG8wtEZ3lD(5h1YyCcGuu!dgNv36Zsivx^%So{6c#$Uq8tn@D_}csl#NlH& zRFdoO+oenpHuZ^WII~2<0_pdtIR*ePd%yugx!C+nhG}NXnXO5&kv!1cPy4mt8(f?GW?Wql%yyh@A=FKtUw- zShz;wHHH<*4a>$CFbyWgc3=o*?wi`=MikC5T1oQt!rXrsrV$*ks=sV9u#6IGT>ZnV zNzHiTnHFtGb7Aw$-!!s+p6=BcWV>aP0f#)uu%dtGDQKl|BXeV`mAqR4IKss%xYX3Z zJsjYgVoE0MKP2{HcnUy?h3q#{*AVPf4@@~14!-iAK|t1;u>l0!3uU84m4u)pXU6K&y4 zZ!y-s(GQ(uO$q%k%HAnFvu^7at=P70+qP}nwr$&~*jB~1E4FP_#g&r}d;M#jb5`x| zzj#M-HJ@jWIY#fTtF@kXG;@NA+@PGzD(WLe(pfPhIr;5I=D3-2zL2KM<6nQa?RvII z|N8n_{PX&4EX4H>oZNpRA7K+`gMXEBZDM#}`{|K`-X$#p02t^U0M$nUk&F-!5fO#t zZp4K?3XqE_!i;vlU_*WfM1;bnhWm9fa_Im>!d@+6BrW;pUKm!aM7$$pw zdjj`G?QIySMDCWZb>TW2!xB-HWPBjIafa9I`u)$;|$3#U>T~17vLWakx!D_Le!VxU!Y5s1P->X59)7_+#0xgr^Gp@i*?Th zWxn9G@zDrwwkl}Wh3DRZu-D@pI%O#S>T;&G|iHVI=R+auRnoRi46VPpwKwD zrWU%HIAnP3cgtUTnCW3>@nhtvdxl+!A{j!jW{d-c1SK_copKz~*Zb7uW&7I)-gqYk z3+4gjXuST3(xeN~;xJ@S?AD{>0lnj#gsrSuRLCbW=_iopCOF)9uEYy`G8 zebSuJDRVdGh2CVgaVg79lZL%Ta}~>#h@#NtI;jDAS1WV@$)G4uyfoO3=$OJ?;H|rM zu|9q;6PAr3G02t{CWm%|)hN>#nYE+a0P_BW@KCQ-y3ja@)_P+r5YnMxpsgu&#Ut)= z{^C*LHl`>d8ur}Ht*vSG8MT6tS;%27!omZ%b$j++ON;V7@e!BzM0AMl3OOX3wwPAm zWyn3yvs1qTJ@T%|d9ANx^A{%hY~sLNp0;zz)?c540D=?XA4-$qaq!Jp0gyXo z+n~H!P5I{tx>v8Z&l1sZFW@#dy?^o*{?+CMtHPiu@mmXl6cNYB6%kLJB_xQE6BETrq`mm>@yTw2lLEmHuIEgG5$<#xVSV(^7vw%WA0ZI#rcBD6NY&=k4O|lt z=BG@;o$%2?G7a0o08OlrF&jk4mN=AK1L+P{E>;QmDH&|}#_}~L zB`a{I28@qHuIrxc4-kfMz=nkV>42i4e`kJ~|2O9M-@>gFMH#z!et4fOIxM5L_|&H2 z*%CZv*~~#6djSw)Ob7@HdkK|@{b3D6BqOmFAh3lG;522x2)y1n!O0a{5etNP@kYC? z>5EREt!ut+Z=f4^Fi_OGe1my@SQZ?uPFt+j5FF7CPF(wj(!%M=A!8vSrGak#)B5v{ zTcrRo)$3|+Ivcqcq7J;U8a~c9v=RqG`4dnflDZWqpC6V#ZS(q#IBvqr9{|NX$rznE zW<~|MU5NsMbm3#IIZ~$8SCO7g32n%3d=3YHs!Pz}u5U8K^!rj9xsc08qu&4x{Hc#d2v5ocjO06#+j_}sRL+i;nh5UZ} zc30ol%;3K!MM8@B7Uc25tg90)NT1h5bB%FuX0!>G(rc0=OU+{DbJrVdujQ=9KK*{ipWJ^p#>)(vdu)?QG{?z%AxI5kSlH!N-fp{K(S)77i5QI zp0-MpVKf|=&n8^_p0AU?)bkuPfmYMApNfjJbw@&{MSst-_KKaG_ZC0 zOz>LR*?!_BXA}3oWwk@(c;Em8;ByW)955;Uc9~g)OOwlp5rz4dI3JsdyrkY(L-2OQ zA~p;0A(bYx(md>RkAAgoebI-${GtgE4BZ|WNyuOoQz2}Cs0e+g;5VR;J|!`N9Y+qE zXx2It52YvxIUvPpLGWA=Sd3ichID+ollt&je?yW<(q=sSsxBje;lU7uJTt2QKzF`u zv7eoGTxQt4Qlfgnq%RMomTQIwFaryVh4Nx|#buikaLHoM`zLyA<*z6IDbgg72^|~zMao-LS3TpF zOFIU`8iY~79Eu2C`>jfEkzOd}rWdn3(IKggG%X=^Uwft3GAP0wo*gZ;kL1}R$zI!_ z37&h1T}1Yq0$~GpZL{~<1@S;WOPOPI)q-U~3JP6n-*c^RJAJ}VqbOb*2NF-|;}7rh zL7!V>NTvaLBGZ#|@J2D_hQaM3BecX4mzQG=f#xZCxn(gI%RALn*;kk$2M%6PvX2(i zSv@&lOj?O^M*Z19$7UQ*8+&j&c+1a>Tae87X;{9HL)IM;Iak@VE|p4JfffT>olw1& zngN=pidm0f5ZxblAe=$6k@fQqDE+pxPxycJX^8*r_zK#&*cux+di;%Wl|Ko+KXt~~ zQi(JWp6$i)Qfyj-s(Ki*!Cx4)#`SOFs1mbb=S8=o*bQcfFagmXcvD!=)A z16HAzw?6&4a-5#nXb~Km&knWpxFYq zp6NPo-Ynhl8_Tn4tvN))-m=u73GLi{?$GF-!J4VMz};TmUkw#Qh{0dKTk{#DZJRpkV%qIzSKzrv-uitNU=NX>RsD* z>h+q6H;YLA`aaToPDr0EQyi9}l8Pm(+{(B^*M50)XHi-w_+-gux{3NO_kdIrp^3?h zQX5&5AKVZv6PhxgvTy@}YdN|@IZ&P1YUnd^|055te7R8meKYxi)UUilH*c9{(}pWH zIx>_}8bb@y(w%s}KGf!|Y8S#b959WgXmFlx?}D4wG9ArOAY9Hq!Qkx)8)FY<#Hsr6 zI#1hAHs*UY<42E0XjafULicH#0hD((AW8LFZws(11fpAnKfyGh zqYR2}iYanc2_p6S#oa4NizgBG>`IQ|H2(qE2JB} zvJw8pPSoEhLns@fZ+P48^4FI^^+B0Fw!tc>-R~yh+g&~QHe_UmwG1Bq<+I|F`3yLi zX8ZXJOfR8T>R?KXHswL5XRe(=8D{|KI5_%0Rjx@*5#UDbL!Wf7NcZH*WgfH^b_ci~P;QOE4{r^d7{g31N`{sXkqx^mMl|Bch z72tWkZMv?TSmax#MCJvqftZl=m9iG8TN%!M$;X4ZJ$2O>?{{3j0PB&$M=1P$a}mcl zy~$b<6P)JBmNB-$;WRyYaaFs$?F+cldrpl^ZRH+%OlhjpIh$8V9h1=4Bq||9sLD7h z)l;!YBGj_Dy1BV(#kR$;keR#9_Dp7rvw8%<$Gux}2w|X=kKvwRw`%GG@9DdKOt_aOH)a!|f%yBLRngVPe=XPw8wcU@G2@vwtgA z)~jXvh$qc)K3~Tc_nyhNUHf55^@OWHkAYN;mYFB2LkF^WM_vWtZ6USI582|b zf+*WQDc@a42rrseB}_~ff4gKJjXT=gP%_noP^o#t;C4&gMo74HQG#r>XsJmR+UI%{ zBh{8pJ?Vwh^k9Ueavx<0ot5ldKn$TIHY|OaAtpPP+Y!3$RscgW^&G4Rlt^I5H0jU7Rbx zPml;JVm_ro`#5XPX%q;(!FK{*pok|`Dsn2lg!WLv+X#j?poW((Asoqj+%`c~#_D2; zxcoXAIX!|eZ>f$bamMHB;S5ouI}ED=MC;7q+*aH97ibFyD2!>N!vQ6OeadHGB4bc5 zfR8Cq(#^De(;u*DQCZ~Q6H!M|BmDC2f>jCM=l;}^v)5Iap#1bngTTMT`u_w=iMW3P zDQgcoTO$)C7khg<$G@>uj?%T=oIElQ9AwB`U+6gY^s^PEiDZt!Es$|W1~n5w-6+1s z+d~=7xvHk(c)>@CQ3Mm_6z{7T#x>O-e@ptPm80EN$78P3l~-+#uiq;~UO1YAxVp*> zx|}ifsCxy!h%7oyC`U+QX4&XSJfg46FjJ^|VcRz~zi)aT1M*evx?;yXw%8dje;mm6 zUCvmGC(msh_t0`RUdMrNe2X{(*3h0j%lA^y5vDeP!n!tHHLO%Hp)rq*yCQOJJoK;7 zwT^4i@N+G%ea7M{G$U0o?Kbo4$2M862VXjTN9(dGaqpFC);CU1V742xWhJs=Xmng) zY`?XdK_oIH9o*DVII5|e_ct7>{~{GS!bGrZMs;}=Q`OsuU36&Wy8)-jMv72hts9x* zLh3>>o28j4@J%`(kHPOUg4m2wi-HUk8|rjdhN8?Z?7g}BXj3-Mt85K2L2(kV5GNRm z&&CZTFkGn-60|*PiU2sjGy){6$4U}wvAOr{ao!Y>Elh1$IvuKf$O`_J3e3UJOY-Ke z3N4BO;ZWoNG${RD=+2NrsE!U?hwv?fFjUL9P=HqG2L^TQc@#KEhot7XpU44XVi}yw z;x=hzY(-tLb$sbOJ{9~DLJ3^_z10L-cDNw=&XK^ZHreHop4}LMix57V_5Y&yA z<;gw|qy29W<8M2+{s#7c;a5cyBRfaqzs%xc`nD6+BFae5a%xjzm3k@)h_YH_K>SLg zQSqC(_(7|`79to~z5{r0D4vyv4OJ?Mh$e}QkRSmx6Z8zd(iSIlPbfVQlRi@aEbn1H zlg|YZH+|<_FSOqmAfDr`#UC|EPu zyE%mO=D--HyD<*0Dt)?Re&m@4K~l0tftC(4FbM539Y_~Ss8-TRAE5v$ruVFa7tUCR z)T2wgfpxXf#E;G%S|pK`NbOGOaN{lWG$(Wub%5q@GTd z=}>3{Zt?gUTehC4kvk=`)@|h z`s7F&$os|^SnZ85qygj?y@Ne1dZTrLhOP+}7{DiDk2@nu9~%TpYwyJnNaQ})>je0% zY5FoK#xMev)aXqE{}9%t`*53M@P%7Bm7yumxl@1BL~WuNti4>JJv z;SLiZrL0qG{#|v(C;7tn?z;DK;T}_vzU*?$ILwvQN09h^tQT=GY+*Tq>jaZjZig1r zjjbiYh5vb9)*7s+cxwc;r(8&ri=Kaf6;l|L*TRGWxTne05FOxPbZhVF5kZ4VH1h@d zl6LHcD(nY}A&fkhiK;+ZcTo?_ne8WeOay1e28*R~q3E9rNuHc0^objQD2x6Akb4?% z=Q_X}6#!^?j0FF%6lkI-)*!-Mn;apo3J|lQG|}*%i+x-W`alPiRB#bX4eu#NVje}OFM5F)2$A6}6oX3`GXB0LQ4@{Yrwiw>v*MIT+YmkCDQ z5F)fieQ=(Xpte-F7x4xe$%O;4wg4IeAVh7jak#K^OC)>vl)HLlxcra?hEFq$% zuwaz9IRXR?VZI14HiGq~NG@VCHCg^4F}I^=QMONPcCEQITJveNm^5Q2upa3v!&^pv z9D@4NB2{^;VkD^pRjk6KSaEknWWkT(=I*AYw569hO+C$XDJvg~YP#wl#W+6JF?(#u zGOBCW!d8?rT#_lv?+3-qeEf2+WktzH*qim=`0f$j@WjDVQR8#sq&N@`cSaQihRf`% z*6{y7B|q7riVvS$(G{PUvX@%5jjgaT~KzBvWb^YDBLQ3z&Xp1H)$*z%2+fdi%R{+ z5;TlD)23O4K!!PEH#>F)a8@{wlC;>P04IhwW4s->?Z)8+vzfe5L;cv@OC5?m9Gf_t*1C*s$32$I-B) z)EVl0uOc(6ZR~yB!mp&3HTaah!86QXffthe&n31QyEVIxAwD!H522dMb&}I9M@G5Q zeb<`(A<{PYRb z9X#3!ZUC~jGw_1=Cf^vYl}6RAb##R&&?U^#aiFQl0kU@gW$~hL`dqZ^ruD(I>(w!f zh4~|!wLSp0GeC&|rv*|8%pwgkZpu1KXhfPh z?E-KotFN^>s1v`*-TC5wdp(5A3)2jC43-S0%s1G7%JaRdP7*ewlyV6csN|`q{VdRE zP}q@dL1JZfWLo`>7sv>K>Q$^ z;gUegrDZh`J^3}oXqU|wBnd1?tIXRO0vQY#DHo!6!Xf-;v#YvDBKIF^Zw#Ngp#NUl zr2oe|^KV>CDmHRR0`R#sG$ES601Cng$cHMjxgQZ#K7aObJXE2Qw_4NRh0y`4am zpcjH970(m;sgdULMmdt@<53K?5o|7vlRU;$>C?z;&Nn2%s+l)1nlsyA_Y6!EG$2NL~8l~q-_;od=>We4YoRnl<4$7cI-wqw@&2dGzx75utI z#HLkKGZWK}hES4Q7VB@i$15ruYBga*NVx;xfKr!{C<14=?Iy{cD;l(}tyA36C6NX{ z%{kyBmsfcoIl6sR!POMzc>)qh-!VDD_1#7vGtI-8^1UaLY-#E;n)*j|O3Y&@EjcgB z#mE3Ba)|W55`^K@h_&}H*hIBgGDG)PGj9a{VwUbh0(82JqY4NJr7s>pf+nPYpLrW? zpMy+dx>U<-{~5$og}F5}Aob`Tq>Sq)rwEG6yL`w#LUtRJ`Xw7XypOzS2lQ(GX)#Iw zZz~V6^;!TAGUyyXm%0hq#_);QeuDg77Q0dP$~w;kK$?7oxq*xalS z$a+!NaresfMl*QP{xWcZYi1P0k=0>-}edrRY8(?vd|&2%FM-zYr8-Gb-*w zL7L`xtO}$G4AbPnf1wjRz`z2%FfU{Zw1S>FA=x>OW%Vkh4>$MO4L_L`cD8~0@*2Lt z+NhPyu${D5%%CkC_b+6C7iK;{oS$q0a=%I?pi^UFLwUk{PEzm4%$$G!Gj<3dyJ~p- zj2(X8IrQ6}f&Yjd{$+Ch3Ll!2wd@cDkVig%v{1<MdVaP z4Bu^!T?Dq>F-?U1=De}w5Ju2qE45C=C>*mv8>H&^lP1)8F?Ffr!*|B<+^|+AS9*~_ z#7nKUg)>ZcimR>z8m=;S{h)wo5-94Ma3M+SsklW3?lot(m1gJCx@5q-0~9o;i2G9h z$j#)aOeGzNX1{Tjkb&oAA&rG5OV7N6Hlb?t8P~0V{dVK}Tk{EWY)>9zD1rMLc59sh zn~F|oAN1;OJGRTOMN=DgXCC&J5bL|lZ>+4!} z=P8T>_erd(TE*L0usICt3m#D@yQQjO=0^r4+cK zI6(*Q50nJGa9_;twa_Q~`MJB;jL5|gSk95;FiPVm{*Kk9lc07&#SPO&30rz6N-1Pg zOGCLn5mghdh;w=&&X-V43crTG=$+p;Gjy{K>S>ZI{Zt!~e1vf-ESICi8EDpBxYPT? z`TbB5q5mU_4gYNq+i$0toIb^s|5wE>>fbtyKc4o7FyQ|&Y zBo%?3egs782I_oLr}&(8UPLl#&1&J$6AxqGGRX@V6iZm7wMcY-;b?}zyXt$dVOx7Y zuUFzx*-#8j9EF@*ULsDw)i?yVQ=}67BKP@%Jh`|* zjbxaX)Cv#oP1(MgQ&rzQibyn|w=JYSULH&lIMf)#nO0!@iiu!_fkbEayz%N*@q6p^O(^new0J*! z%!OFVxg5;)B<*FO{Xp*+>@NjZvC(V$2$IWZ0or%zYk*_*&*TjmbQM6WPZhR!4(7X z?J=kGxU~rLXpSYvUKOzX`^cXig$L1bS3_4u!w`i>4?q|_G(e4#^`kM-3js~Rn+*<- z`>8JLs<`c`06hpip%BsNHIq&sg=H{`mTbVIVOH0&)1P1GN5@Li_i* z*8g*r|K*^G1%(v_t=V~-D>zX8Hkqv~3Ocqk*=c?J z*4epmkoZQ3Ur5|sAWTP9Po0p^N8UrO!&i^bz(J(K$HhRyrND<#Am4*tCV`hFD+&q_ zult@o*y-%^QAC}GO%%i+>y&7)_TxK@p^>q^u|A-oDJcBsUw}ku=&Da>3kIH(YeX6G zX_w|cfBzlo{putSPMUz^4~&)-Rzbs!;L~w#nazB(~8=Ssg5>a{85KFY9XEm#z%9C>m_&wp)Hw z%ICW4B-*TKC$|XeEwbpf6YqC$jg8*hi0asy3>cuDr&wA-vToO|p=uAso|PPQ%ZTA& zeoAvlv2b<9hd#t-D-B;O*>3Lgsw{ap0?MtNaS#s6Uzt=-33juW#_5O}d5s!sA=#YB zC{2&bELx9E>Ki&WbIZ$uy+uX8B^-eff8?h)q*r({v<%Oe){Xm`Vx`SX;gmpgJ&PHP z0m6M)mG%C-R=ag|oph=9@5St2j&e5$N3Uhl6q;o38)Dk9a=_cUM`T@dLQ0#t)A|n4 zQa|tp0eVSc41>$>hyD&pn`_{Z6J z9Z0_K_zZ!vf7=qm@Q=LOzplbxNG&IET?$YDdAMh6N~N)>WAl`vdBWe>gWPkK9`Jkb z4a>02+-H*BCHhxYAo&S_=T%(fbcFyLpclvXbjG!t>GZ0HkC!KCT|_Z@e|oGTJOvgL z!<+_|6YCL1sGQ`8nC$Zc1@EbpxQfqc;im^JS`%X!@zt$Mc*Ceoo8gS*DhPkw3r>s0fIrF`}p)sodT#DjhRLms-R zK9L}1@!}Ul@b7HRat`T?*~tm8rg(iL?+e(|iQmp=L#1|$MW!n_9PCZ}W}}zejPLYnqZwPz z`|G>h7uOvly5ZYMIN#3kC<@cYONCj-4 zOqL{&p?nps4cIg`7)(ujAD0`F+p5hD%^S=3pwZNatw)ro3~xW|({+DPFYUlCJtm`sHj`pw&k<i;b!gZzebBU(NUWoC$?E;(vWsqAcA48E#=j<7 z(f9ZnF+-5n;vwS=)JFTIHD;cw6}{KWozS1GJ_xM?SsQZ4Mf)g*4R9se{tE)HK3fgB zJCpx6dlLV5_CfeAwb(CP!|=%OP`^7tQ(b7-_Csml}O6Ja2lz1QSitmWu_e}eIKiRIV_Q1iiN$2miEYi zwm)C3N+^LpscJx=ns3BuDr$*os=94!Tx+gBbLR~5eJO=nAQ*)skr42uEr<304&f0w zURv%FGwe}r8!@!bsZx5TxLFPP3Tlnuq8Ih7Rra6&gSjnTT}>R*KX8m6>B=w8FepKk z#yLwN`b{5;nLW4(XQr2;$gF&Zr0BS8hK6{$6ubh5b@5pEw3Jg>w%Ahz&wzun-mr*} zwyvZ+j8vj3eh~6MmYAX99CuxI3S#XOq_PfiEV1{TZs4+5_%j=J8%@I>bp0q+Dz<$% zN39F74SV>hz|V zPqOdj=4@G5oWoFe$Sc*U&$p8eidiX1ZB|Yq7rN0gX<1cURp~7y7e*2tuRE8$qlA*- zJsdZl%E3>WSTH&vgl@?Y9+Ta2NwJE#1WMQfHFm|6Smk0Ol~ZvQPDPX}CEz6juNgFX zI&92tpbz2B!f<~WG4mh5;;9w5kqcRl6H?A$z?)-p+MnDz&IbR!w4AmMep^s#DK@At z#`ThdQ^M0JXfg65j?wngqxJ=&Jr;aZV}|z@%J$XkJyZ`LLi_%Nk+#P-z&GgD9pwAf zo02y%U_sHA-@zB6)JR|r18H|rE*VJp2cqU_&6YobA%|o>o8ZqlM6bZII0(I9Ddagc zA9lf11;f&t^U`k4IUr_11a93mU^(?H-i)8iR@@ITi!8$kWGN4c zHHtHoD+g;_V$K8+JbXZQ{6g>mw^iCSe(QvlsHWCVdoKM}aj_pzx8}$HU?`42`_X;z zjd=GU%l+Hd;b9;@x&e76{BXLlU-Blni0YxPOwXTzf#A+#=i(<4i2rR4oZz=u!P(By z!0dm=Wb^xS!`~15i}&&qQo4RJ{Fpd?{$pxk_BXIpwQ|B#LHC6vxS+Mo3TI(0U#uQZ zjZeMYG^Yne6E6d{B#2l(&87xhL3Pd8ESCMHB4t*v59a63H-5Vbg2}j(oDA2QcCVZJ z$bt5ByxsE))E=*gB3+0xR^$ZHcA^!D?6oG)s}*kqh#NY!2RfAv**l~b#hQ?49}7h5 zNp;v2Tf>{IPhWjBEk?3NeapjAc|2qfR;b`1x@X5TYh9-6tRr=E!?;zSz2(?xop0wd zS6|&bDRly^;k6hu$n&fM-Hb4DaisV{4!T|;N_os7i}TvCk>ugH^EUguWd4+$6{5p{ z#f1o&<9psxBnKn9E$Q-f5++MFXMhg5Mhp2Pr&xdWZ6T|NA;v_@8x1BaM|#V#mW@xG z8{0B0ASiayH@H?SknaP@W!nwhp)nTkHd^W3SI@B%S%%`6yY2+qdaXeG!KU5koH}&= zPAwz@bE}~vn+o%bjrkd4)e<%!$STz(Q}4M_6l{r&2f#+-{j52h9O$$NwMwo!)9IH4 z3QlAAB)Tr1H58DlUu;dz@=o(&BjfBfhExvFal5e$nqZDblW+-C62t`hV)HXB6~;3pPxi^Ym*3Jk$cL#Hs_Hu zhZ$KE^|!~us_a9_qXf!FjSyKjcbY*8rctft$u|oT_?ppChfC1S<|J4@ z@1k8WRP^iCfv8<;W7Wi+-s^haS};DB<8rp*m1Zp>Kl<{}Y3QAY)1=W2R;k>=aS7T| z2@S@R8l!{pkUb~qx*jm4(99WbT0uX$iGrP!d+0uq@v>&p8_6NYR|oCX%^i2b9S?%u zn_m@Jq2ZK<&<6xB_F1JNZTKR}cpgZ?6B+WbYIYo@ftM7+yTGR|jTpnjU;RX8{!ztS za8u&uKq6*bjL_bCTj+AA{ebvaRZ-pT>|z#v#z)mh@$2AkKjAZ zXn8X8ad$jNylWC=)YE;zy*&t2SiLR`Zh;4XNy=ce0C*4+qE-ySR*_<$%;S@58Pvl| zlfXoglmpbUfy=|cC?*)lzaor%#wt|5&Bgq7#>MGxlkqQO@jsKsIjVmNDZ(-(K@8Yi zNS5s?)~jX$6BmbQ(khyZOOX(#6fLNukQsmj4M0<6%pL~uK1+Guq67gpOQ~*aPxS15 zy%}qtF-9f+6dS;up6>Q}b?nYKsP*&X1E7!1Q4M#`(}%rh3^nFfo{eH>qa_#LNeCQK zw;n+99>$S^%^Dc+Lk(nsso1V58a6e1v?B3ZtQ%=%0*C>rCv7E39#D}JvJAKA zEbBm$Go9NFh?#{rK${=32}!VJ7x=_y1w2!?-(r#Yy^hAv-E3&BemMpvZT_klI&`KB zgy{I8jlq-caSqPkj&^VrARhbXz=d{9iWz7C?4b*U4Sq)%u-%g*$b(dqBY~Vya1AE$ ztx&lS_WK=ZKd%L}0$bwi3%M^kk?tG2fny~ieBns^7XOCZ`ND{wbg5=k#Ug3&ccoxz z;AOPPUl0+OYP&@E&+xz0%xwa|$Xoq!hyi%-Z~*aYfnYs)8Q4;v%YZz6PYzIUlOo7K z3kTlC+t&D+6L@egj}P?4@lUW|BzAulw9=Sd19PPQwl1&Mr$48ux;i_LAU`20 z*k>*8zvr+2(Qg00P~~5{U9I-2hBboG6-6wXxC{?vlr<=O5FZAQ>bSom(d!xwfMtl= z5+V`M^pg;kK+8O$$#Jj9=0!Z~;oX;>AU{R+s)2N) z4p%B%3@w9nBlKCh>s0tKMS|T_(|6ObbQ9ri!|Z!0c;oSb?}q{MAwJdj$^rXU5NNVW zc@)O`jZs^;JFZY3&J7nNy%;El>)}-B-67Kv3(Q(_s7~{Ru2vP}n>Lq88&KLm%R7{7QTTg+-x9 zjWNvw2iBb3N@(b(roHg_)h@Nm9L6*qx{JM=^jG3j;7_?=3$s*7)$;7=rwOy2p{h1= zup$~`t*B>er`D=$b9ZB-KKc6!g|hVKw*6s}8z@&6S4`U|o5kMiS|Gm{n_v2~fPo{9XEdCKNAax+4`PO}uN!RAX70C@p z<(Q!>Md&#E=3OVBUtVgzTjBqvWWa~u}JPoS)GcO zL82bHhr{FAw@WHEhSY92J%hE(O)p-_-)i=0I%#gKaC-XeT%7l-LQASfvZh3f_ubr; zMy_*QKySdFpJBI5)YcSzEX1p&{42>T`^kDflKXseV%AkR2Jrc!-8B#vand%lj};m- zE)00i+~JZqw?@F`dc!cU^llIKCyq&j9B|MaBnEt@jW>*}NLaVTdFO7$-XsRPSrnVi zUi+qw0zuvM$#%-TRxol|oFMHS;W{|X-*|YK7 z+t#GZk~93h&-S*|LQs~(4Uh$MNsJ|Z!)X`hBhs3@LK5!IHJRzO@O~#EZnn<_nQ-;g zQTI5Bq5?gs4bkgBiJLMbhJ;=H)EzbiMD$y)B>4-cYSeQ5QHt{~zdtI6e7)%1jGwKg zo1etQ|J^J9vs{mbjlH$W|1T2C`Si_5V#vQh0kH&;h2sNNf>a=8W|uU9ElCKtEupI+ zni42!#}H8yH=W&r3YxFy9$zg!AcLKHQ|Et*&75v8%>SIW78e4K%ms2XGrR6`x_0Yn z<9a^-y8Y{mJ!VhqZ198%dn5&KC+#j|nwpNiekR;9@u*6=zy=5zA}x7(N_;XsnShG{ zA1xQd%wZrB1=*Z;MOz(Qdoc9lLnu-xa3dya!^RAun?sIQH-W)eNLDM!t_&JCcjS62 z!H+W>P6J7 zrzY+KVv-|eWqe^|#L0~_osg5cu5PkVX2t8CQ-c9zDxJQRVgikV`hI3sN-sfp0x%>TpMJ4RQ+Eo-Blbc~K|+jhscZQHhO+qP}n zPC6a4<8(T@tKa>eZ=bWjyL+5H?j0jP*7`FuMm;sxtg5H#sdnK|meLHE?oLq?jSd1b z6kQ={Q-z5#LNesQ1Z^c4$v!3X&wX>J)}F|56&KA_{epKJkR~)Nhn?i6zuXBEs`YNQ zT6&Gyn|M--r&M^!S}MP+#ZstC{vu4tw-|qabo9Cl%UCj!wAwk_j)aXZ8(H|wO34ZX zlem*T!KGUAN)qobcQ`3M`Hf_AFVbIrY7|=F%XvJYnxCey5McspJCqz%e1@so6cz!B zTi_VtlRY?;ZhVTtBJ*`BT#A-lvZ-Z^&6GUzmgyo=&B4q68+_k_elZiVzEaj0%%H!z zpe&ldy|t{~1!TBD=S{l1$L8)xVFmNBWr(7uVwT;{Sh@56tJ=W#PH;W%_H?%v2fw$yZao0Uq zc;66Ruk(Y9*?0#=VRAy3bMq}%t&s=kU>DhhI#Ev8P{FTeD=6gEe$+|P6LY6riIbNI zgwhu8C~*hS=BRI9uMywEgXDfw1aqwvUF8nY&r$hKQ0*Hs>kg(%k4?=l#wPQPSkSHZ zWvfHG?K6+Fhtzf=3x(P2R6?qW zjMXhxz~D@bI4r#rD&{!z{xt1oX+tezrxt^h8t$rmU`%zK7(5Q9&|rQfq2cswv0jhi z9orOSMeLB7VV2LOi-ew2fThD^i|;gTbrh{8b~Y@a@PmXR9{0fA zWFn&mFy-)f@%y=x7L;q|9D?y{>TNyi{j02cLlk2w;g)UCmYA+fM|MGtEf=Aa!JVeA zzUwA>Zlm5QjNA3Qlj0kz9SYsk!g^hH%)E7Ic2n??nz&jh4c)5_ICGRks!Y3~4i))& z{|R2vL_?efoF$t93{7F>M8nTD$)uw^O11YKto3v);cxY@OH0c&`(Mf4R+s1J`pLk} z)kJyN%zrk<-r7`o7Tmfr4^MCrF^Gy1tIQvSy+#~4tj)l=+V6t+C0fjVet)}z9M7$l zOLO zd>+0J0{&&VxSYWKxKaD`su}3l6b7kAMg}YbxIIk39b?#d4s0>73IGqgpXFA}5bfIBzzoQaAZeFV&L`vSZ9 zUlO9;^u6L9U6=X6v^cnB1y06271UL}#;3rX+w7}Ff#MBQezP6Udn{id6jFT752G2# z=D#4`{u;zOd(eMV>>!TE!lJUNe;vn2}PG6 zN0<1%xBLs$k2-Iu#^#B6+(C8{{a(D_E;3b5JDw~Y} zj0QnXuT!L{ ze%ubTBy}2)BW^;{+Ab9Bb5SB2iM7e~?#5?3Op0G2g_9)KhNKxOXiOndlrSnzWuXSo zs@RlfW1y6~Cgbd>s;QsDsHak$Pfqk8oyyBw{eU0LlaVuB(%-3&eM1B>zSeiVISq1v zI$kdiOojw}?USt92pt}H&pyQHP= zd`XI)kzv$I272*V7}x-?01}Hu{q#8HwL|JijyF|Syn<4m2k?8c2SM2%)Z#E9xayOk z>7J%nla9KNjJ|JoFIb=M;3;d&^u)^P3Dcs#Qyvuz=_)ed4LfhmnLW!WupQoZhiIyW z86dP0sU<|XGG~ow!x9t~pTJQv!jMrmgSSshmA7T}j>1!M@6)x-e|K3V_pC8yLqnG_ z!R|b_->ke%O127ba@M?Y;*~P@!tt?d4^~fNQ{wU$IKk3g`Vvcp@UJyBEILZp zTaCNTbS2It-H*kgqtwUD#v7->YOsbt-hCq`36zgttPkjl!KK2ttawUz^>vvu@ zXw-I_6SnwJbL_Cl<%cIR#@Qu%PA{v7(yJ%oyLgv`&9?Y`yC&})I+e=unb7-mWGtJp zS$AsOz?>;lQ>GS;GIQBUpNEZ|R^q`_2_!)h)DkJemPNI&1I(7LnWBr(c5%U0i(Ee)EOolwD|T8~!^DD> z7{+{oQ-r~Xd4w)y(ocIKYXuZl1^h_EqazfjFur6lq8N3KF;8NB)Z)ZIPBB9dzLY}Z z?QeS@yjZu1(F(q}%+tjL;n*9E@i>#4SFX-3WisDpjcDCElA-S<*rjJ<7_vqI(*mo5 z9Jz|u6ui6xvT<6-xpByaSbCok#&)au`YdYcQ59VndLr$9%9b_H(Gq&zhbk8ePLrLS z1rh5A?hcQy4dKdk6I+MOnkBdR6RY<|VKq@Pi}m8?F3ci*Kd>ftcNcLF9^Vc7@~nX= z{;5&!)cc-9{-y`JhY*U_83=7Wu&8GQS=?8!$;ZthT&Cy2P;zda`T0_mRhCRaL~vpts&5*GMFCbNh_$**ZNICofjyu3`OT*=m{goXIOvDFyz?`_OKuNgk6wq(`1fB3z9dq7NXNT>6m_jLW!5)`@e2Kfwl)Q1V9yg7M0kXyz z@ebkfE=3Vi_nfJY9iArKA946Liz+awo2ge-EB*ylr{Zt*e5bX%Z<_Dgu#czj%AFLv zGgg;S_O(tw-;C;?1&*qTC~!e}pj{UsFiKX$Wh^OmKy>BX33b#A1K?^kSbxkjX1UIa zz`%TFWbpKc@CjOIk0XrD&Y;BBf zoc{B5p8s};^1q#_V(j1ukU2B{TMj|^pBk`!Kn!*e==jiBTu6w5B#)vH`FzC68XoLm zU;6Ul!{hn_FZUW>J@|4yv7$pm_#^P&Z?pzC20a_J)3uwbH?lDP@Y0`7p&#Ggrs}4$ zkWRzxZQ`vZl2GHYC1$It(NOU!SEDqoR?!~QMEbhfe9J~S^$r)Rh|w1HRSaI3Lf?;> z6(*2ujQ6({tt!q|;sG}LJs|n-W2rw{5wNer#?i#q!TLY5;vZ$>|J#{%4#r02hJbA# z|Jm`pe**sh{dl?m`cMD3TFC%v<}(9;nz@X^(QID9y9U*g;-3=X&r*nss0>($fOa*{ zz$ncoB}u%Y@FE1rG{KRWlqd;NldESPY-LTlCO*XicCVVU!_0lDL(}8y1InjuidYP? zLv#V#AdaGIb4#!q*~c&ym_630Kg3z7J4*%Xlzd#W5G&r#ZpFWel7n}_~AnEG%{NqS_wF2z{O!0k6eMEV{W>ir%dS#{s zyMo>;Yy3p>s-mt#_f`p1z_AFL=s-GyV_+paK2gbzN_G-t&w!?kMeDGh^)8D>B|ppi z5b`p&DrmpA4>4wCZUr(ZLlf8Q={V;{4ytpXxu3MEC3|Z~374&Y=LTIiP7~$!8^~`T zsysrZBmuBCw12#bf9%WpZ-6NMmpkeI)(HF?iiAmvfv?CRABIb1-R74>P6+uZ$`x6nVFlve*qE;x!S}m&3Rp*sJM|gh)zR?6dQpYq+v8fTfY=YS+k0zgm5xSTma0!UR0+PY1PNEaqa4NJhSv#Q%txq&dEb)g{t_*1jEm*1jt-&9 z#c_A}Q^U&@v4f8Q^7td4_})jK6*34D58U}3Qzly%NxG&zYkBT_SM--Y55K_%73UZ` zt+VmJ1e^zFBDC-TASnM41foCP3d8@}zV#o?!ToV3$Ulz+gta!thJXhQ@Zq1TkJ>Ty zHUnSbg-jv)fijrm348jOwfH$DKu{1B!cI~b4Wg>KOua?Cut4$RVk6j*gyS2gt4wyy z9?xGKK(9me1AGF2^owrS#c+7rXm^G^T4x(YI1Y9Ya2IY;=;dZC)yq6cx=JdEa@UeB z7#rC&%Qc)_j#+!;sV2LS2PU_;$XMN?CF2~^nivL_EKS-BJmD3ud-M!_`*a^H-bEp2 zeY4NE8FoBC1i&wyI&S2h{L5lbghS(+cynxiJ3hy!j@b@?MSuM9$McWj|Nmv6|K5qe ztg7j%DT?wwlHwF&G;DuCS}rDtoj`gUkKIl{!rVh#PC%^JJp9GKgyukqw^^22vc@ZE zB`L)c68_2^>PZs|mFg>&MX0cP)$IcKJCLv6F!YC?@blwTy@9sD0kuw77kA@RPP*;m zyUA=$Vei|qtS^uq$Zn$@0T3vg|8`qiA8(tz1gLpQ@lBDtN(P3xN%2i_JMko7jRw+5 zh^3*opahWck*-Ve@<;l>NZC`#4OJ>Ql`|fDMY(0Yp=detYPHd=Jt~i!{OR10 z?uXjnf~M^#_taHGFyrqC6@PQf{Jh4wm)bR2afjADq5fnrkHk0$+Uhn_{j(r+M2!AC zF=^2C3IAd;d8;j+v|FH^QQF02=`$@&RRHcb{l?h(_#T76ySw9c*Gh3;rPxx&%Zmmq zc~mofY*TtjMhcChzh>HGCv=A1js~=D!?iKA?jB9^bwqIOEtu3Z6A4?HiW~69S`)X8 zAKJ8=N1n3zhK^~EV&qxrs)Ph*w~TTbom96ogue55RclXq#gOFA9qA>?dk@DKi|p$w z9Xy{#aRb9k`Jbytb}hz-?Wu#$$0gCOL?{Ay)i_DgeqM9k#}zjA@=!u|JD-nHl+=5} zZStC+S1rPjG2p|M`u^z)Y5d4n#4n8EM#7lLr|=HqFna{)uPnjY z(a-m0%XEnGMyu@)1@9%;Bqysku;w+CR+EpbzEUw0eQe`6;9bS?!9}Q2J95p9Z@&g( z4P41rM%bGl8N^uPFX8y!Avl8<#l4_+RnRw12-JScAe!E2_jHSMhu{4I@(I?>j4o9$ z)tK(GmUflY_vK0r0$SOH#C5zYo&#h-cBUQ1!QaHDwAHR9yd1zZw_cA#nYp=5);^!! zJcNL2ZWlQpZ8GW5>o}pgL%y8tC|G0b7*}Ba9EOi!f@@hTS_X}|IE*duew8;aRBcFA zs3oquN+0Yn#XRT5It$F7@mk?g%y?6IZ{Uo2YUB~P92J8{T01pr2rL()%!nwiYR${( zijLVl@d^~oc1yDc#<2>m3&h9EV>VCOBj<%M6W>zMKpf?4BCc_^5YLJPe2=sc$Br@= z*J`?kI5Y~gM;={^tQ;IFs60bo9W|fiYDKVToDAb!Hy+CBH&&COY=GGm7fwZRRj4;6 z⪻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∥` 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

j#-apkG?yQ45M(5ai#k*q3koob8f-TX*S~6 z-0e6-RK-vAPmn?@p#t-={<1!Y&wEzIPwh{j!;v1)b+3;3^&^~Iifv`wdecYQ$FNFX z<*dvzr>3;x9|DocmWp04wq?u<{nC#%V*eBB=a!0}q95yWdzt5&4?68@QttPj3O|J| z8P-3d4}6uWoV{H^^Ap7)pFtgN>&e5l!)PzH@R*r&`-!E}9Xe1+pBoT+&&V(et86&6 zEW|aF47xYG78=+3_Ao@GgY~(X6UgK*V6tI{lIZeha3|liw5b#mHX^+`IejTHoSeQ~ zKv91*RBs>xYEa)l0=%#$tb{TI=d(P6VPdSjM3j*P?CtR$`iszA#&4u~$bR zETX2#kAi)i-KbwT`r0ioJNY38h%_PsQ2$4-LQC!1@}y3a?)Gf3+}m>8L76a+1Kkh z-Thp_r^7#H3&k&&Vr2F~rV4ntuaH9xp}@V0DLiV{9fEm_DKWski#e4puQVam9+;w) zw}^LSj9?^K)Mf3Vom@6~%~(NYI~{g_y%qK$E9~*W_wm(GN^3RD=aS3z;8>>VOC{d( z#*F!+INF8m{J{@a4*p|}ZIR659|dYd#`MHT5F(ggg}8}yYLh;_i~D3A#a^E8&D!{2 z>V74BRLL08(jG&eWUZU&E zIuP5zE`G(Mv0PJlm(?7s${|T(@Gbxnz?iQzQF-BvxUS zq1LyT(HgXT4P2>_TYiB*Cpx_ajB~vRvPjAX_0i}MlJO2uEJ9G&?Q^G=rA$NJdx9^+ z|3OI&r;rC9f=A}7AJEqJYC$S+LR=?ZHpM$FjIWyMT#7$6-$S2~OLXQZUhOTxi3(YP zK%tPN;!lEL%~Pki2CXZ4_~dwJY_(6RM05%j8o)ZQV#t$G?k=99(aE^zybM{cnWjaT ztJmH^sjyy1lQ0VO5cL%uDip}ig}yQ34@Hmeo7_n_=C}mq_V!eapd5oYMUwIHQK4r={T2Bvd=CBzEM4|viY!7H{Gs}$Phca8*QN=j#BPI z*9Jw)*z@4Au7T@S!%k{d2^{*h7HoyvN6fRa-31+aySa1o6lRf<23=86)Aq`jZj@^rE~<98I@%e{woPt2Lr-y6U@ z6uBJ!DeGsEHA=nXjLIreX^i#6tCiZH6D-%QbafouER%{xo{%L^Ue*+v<2pc}jm>Ek%C}6}qlP zd*TP61*Kh0`M!ND`jR!QT23OhWaMJIr*CRCD3L50Zs;DNUkrQ)9Z6<%SC5G+`H0)S zSG}i!QbwO14w-p#scuG}dxl%q(Wpf$tdtBgjC4jzOYwPTEK8G6 zALx-Uet9fZ3d<)9#+I_@g&PZvCFoI@35hK;yKcyQF{+U*>B(U!$Osp44`+VZ&i!2e zG@h?%;oapv=aD06U+j=5dlyz$AtaeLxcd1$&7nyXKn8xQX zE@HVUK*kzI4(`4skH;)ru=9_arr!CKUgm3~n+QsRHS@!Wi8qUz{QYul9r z^`^h)Vy)4|EnBk>`;)gV{xxQ{H%+>>Zlg@J{PQzJ1Uk(gikwt{i-(Pk1(Hd1THS6B zRaMLBgyd7JR=PKZYM#}Iln8gDYDoxJU9bH`=Wdk5waYS?6(+4Tebz$1Cuj(K_6>K- z*Jt<2-`SIyTt%t-j}>XA(v`m_q|#FBDrxzxG~WvwA5^1KRcC4I1SxN{8{+>aR7*-J z*D79PN2C3z8oek+&>q?@jC``77`c+Hmi)3Zu0&GUTpxg*G|t0qF&}8!AS~jjA^HOw zolziRT%p(9REXeS*2imeen5t9S|yc6t6Se*dXTQfhE;WvrlyiIOR_GDo`}SB?n98g z!Mt$jr3WVyY0&kRi)7AtK{8R9x=cq~cV6JmeE!EyMxT3uX{53UXun@&-h@z^oX%fb zI-Jz#!miJ5=`u(8rlJ0kSP8MuW`1;gKX8RdGm7+u^qBl)0QeA*(XZ*#k-s7=c8yii z^VlbjKI$fF_~F3O_*ZQaF#B?&da?Ho&~Mov-C3PTinI|9qvnB)RV2i-WvH@l%?w$w zo=it#KubaSSI36`;p1Ad)HoFpv}Oi>+bK2gxHp+!Y9L&Lufi8m{I$Ry}(ql@J94pff zL{SFWB4?AyJ3Z$+RVu}zHkWFN_9)>;uP!=$$W@s!R(Fv=d``sKaT(#YXS%c%8zbf? zY7FpzMw+XcHHy^p?fcAB-F8;(8zvi+*n-;JR1e8EjW0V_Z}a80&W`;$KTWzoGWPsI zSkr62{MG96L61lkrlMSjzFhQ1KRL;CCBI_NAzxEQmJ|pQ zbQ335m9O`idm2r4S<5i{S$8R`_of$ZpsH?sr}Kx_ zWnx|(7!|=6r@^s*H=3b4s-W2^BksIpdj<3ja{a?eHtY#Vuo!!sOS!MHv9aqg!Hbc)?s39@m6_M` z9lb*P$#>=V^MkKHotTSuf>?SR{|qlyEvW3OU~RB$gH$!!$o&DBay8m0RxNgqj=_1~ zsd*&&frT=dND`G0aS%gmlHI`F##p9+V@hx1Ojj4YU#`B=HuiLmKHw6`sPK1BW%Qj- zBV8M?2D>0l5elyTvJ7JpFYD4KnYXHi>$>;mcvo7gB9I2|lDM1~57jPvDEw*x6zYd4 zTw>483o<-w&1G%DmG!Qf#hiew4+Y8;I3cnw#>zt3bkdwR@dOL!8>lI z4KO@-vxu4uxJ_!FO692@ytoYd&Bo})rq|#=VIQWZcBt_nKHoo0hioKmj_Pn zTeO471yC0d)CMIPkTegHcZdJd1qby|@nF;g$yeqdl?HZ=JQX}cn+;f^%0(?v=E0@Q zIe3>?q{>AWF7uGv;&R3Q0a^I>X0%9|2Nj!Z#M$ryZB{5%?!FuDS7%;KU$G+Ub3x#p zfebm?7NRgr+n|D=FqVnG2RIMN&_;g~J^-~xY)clsgj_9?V65(0;E@JsMu1}P*aO_v ziL3-3iR2X5BZc=B_uL-!XCl+nq6onA671^!Iy5E{w=BwSV1rD=Ak`mPSi^t=T@jem z;*&g$TE;>*#1c_UA=U@%v@eDQ%|0N~j$JxbgTtS<91*-b;KBNnc}EC!c#qSas?Zth zBujDXHDS259l&kKMI^t=&LN?`0XF%Y@+yEaL|My_JNnwBh-Q29nkCR(fP5=Mq<{u8 zmaN6F@ovJ^(wx72 zEbv(adhG?du?;qD<;mM(;x_^L`pS^}Hs0^;7hnW>+p@rI7#sL1`-#Cc>`(NmeE=z~ zaZ}bey=Dh{fjO*Rji!cn@m@pMXx>&x$=H!;TuK^&{5Yk|Flbhel0tdf@sAV?QWO~{q)P%R6Nw6@cg zFJa#yHHIY7A|We(q+S$UnaeWZS>OsRss1kpU|oV=z#s8IxOGNDPG|Tdad~79pCMcSTEXg^ zMQVB*3Sb3Fc6(N8z`ul*sb&mIzg+}7e8vfeO87^-nr~P|D5@Fm1W6)AxfT5cI=|SQ z1diGw?4eaxU-dkZB*Fof6#78_*<7^H=$Jg+vH}pA^(#)PSfdijPZrP$T8U3-?-Kmb zyzCOl+NfmC!(6jO44XQk+5L}U?nn7pj*d}X);Vxtpn+>x2~Mq!xk7qZF0%OqCKakG3WAOq5Djb`G%J%KtDxc?2A`j_$uo_eSY?S2kisDJGV*vF~Sg= zo3{|+CrJAvYuj6@rjO$6FN$$&oi5{AHiYQFGCk@@X^2jo9S$Ot9Gef!FU+nJdG5gK zwMRZh`k4gZW{j~F2xY#t3UOx^*_C&qXW7Y}~75OL7~ z4`KM;>p^oD4iuGeWHcOJ&PBe;(dpxX|+bu^a_cvpcsa@!yCX&2Ef@16M zTH;hrN0M^y4TEx4>MBdMi>GQha%at3mMmq4PEZhM?5*^9HaH_=(3AMu`=q!QjlP<5 zO%Xn910pPrP?QmEitGaJ|?5o%sRa>>j;{gFb3 z?QY%PPy)lU<`g1nia(BCgGIH5bnwU}BFWN5jGLw2O)g7Ftu0~s;d`zbJqRi*f8oaf zx2~pR#e{^TM0H(~%o1)OOH6jP`Pxf9iP?nRYK4^SZvQ_>dk5#r!mjPJlXQGy+qT)U zZ6_VucDiHRwr$(Cbz2 zN_pxPTn$HL*5A9j?MdDAluw~4uiP#%wfJ;ehj?pc-Fca2D%uSa#CMt5YGOW5jy5B$ z+parxkYqg+DqKbGC6{3}c|&@4@PL-j)To)AASL;Ry!#g%DN*e% zjM?ORpSZgtLc2byQ+ju&^3$d*V0L!i2GJ%OZ<>I_!&>yW50TRasy88u3`hfO-#;=A z=Fob?eETA@#ZW#o?(LRjASKuLgI4`h72YfwH`t`xQ!gvIljv@Mjcr;i;`-jX?tWti z&hw{rZiCtd(-l3g{QESZkO$>3%?rna7qgC_G`?HyH=eXJh&nOF484niYJ)pdZH;9< zoJt6wnZTbdReU!z(w?dJ4%H5iXT-)i;DTP#Evh_`2Qq!-8X?~!{)_abBh6AX!Wt=R zO?{&!(Xj7?4!sJjKp)7K=&(>pcEU6eW*If-hZY=ial*=_Y6O9^d}l%(0vWR)GGUE) zhH!(|p-Ud98`IdMKY7Mj4qu94*R45wL5u{u3^}YyFHh5gW)1jUYKv#+4Xc3aE&D1|PHlQch^9ii^Kr*H zf2hpaFP*+M+-bWCQln83zNOkm^kVmNKAHjsrE2tMFUuf#>+Tq-cNn9IFYvk@OQhSf z9H`?NH5dKO3yi+5PY^RvO(A&yjGVg4ymsW!beiBR-(Op44>wq=@7w}|U_VTnZEuy= zb=O3NT9ejdH-mnKlZtcgf65y7XAan77JuN}%EDVA0GPJV_DxhpZURqg9HV5=FFspq z9IK?#)At^^RcO2I$V^=XC>-|SJS-`!)iWpT^i(&2vxWRveA5sUjyuPtjxrv1Tg}kG zo0P_K_mWJNuEk@D86PC8`uKq*x5c|^c(;r{{MDqS7lm-=j3{HJ%+cy2W5k2-~LGFAZu^t0*k@7Nkgys2` zg_*-9IPS>cTN5T;-*iC2tYJt)y!Q~C@qZn81rSdU(Ht=Zq#LFYEy+YZkpvKs4%m)b z_~8}zAC5Y@g;-{8r6@jg>pfxrL@*7dkvrp%Yh}FhB93x70wR=A8b0}bvG71~#q58A z%MN{tQFq6xKoHx(0i*7p$Zdy`I?HiI?QMa8Tjx^3Vh@8WH zBL?!XNCtsRuEcw`NpA%Gc*t`xBEJtje=`ac#tuBvo(Q%z!drMJ8BOSvNtw>kfFaBG z&?q3YMs)CtvRGIVz#c~hX_AgICIydCj;ttKVp`~U&^jWY#xA_#F@H_7#KCHd?tTWM zCnwkS6$=4KZ>yHT4g`BF*f(@@1S#uaV62Q$O(T6XmnWE2(0|44qKT2vBa0)KQ2Rpgz??=w{L;f; zCr1p19{H!V(-DcHa6n8>)V@?Q%(`m(mdX((;uxt>)_OFUK&J!h8Egdh8u;;;w$&O! z@*c~QUb0nXavrEuJ}>q+Sg656@l0k{fM>V6L9jx@AsGpRCQO?YmHYHC#o$oXWURsR zlX&QiBO1vUH1{|%rFEKV>pWe4GA-(!u$gg6(YVer@j2QjgxNFP@CO2&4Go8uTdi!sj@jnbc=nPxYt7%w#dR%s>ili2Dw(T(Pd692Ca~cbLHUb)#-*G zMsR5kP&<*zYY^bmg4Zjt55g^cA6tBhAccuJAP*1cs5c1SS6cuGq8YV|iG?fb=F5v2 zRfP|!7GmTU-C~XCc*<4>Aq`gycUcfeHqE1393nd*Dqx--795E12kt%$kF;y)MNSPL z4-aV?7PYH9+yOVsIe0!dOzXTUdp++NYj1t=!rRV0{ zA3tq>cm_+y(}gCYrL0@WL#!B!dct-YnbOc-t;VlvJ~tZa6x0#;OI`7p>eAOonN<-K zbj9>U&>zhF+jt_mUQP`j#fFYyiP*?T|IiYVy@%;KRJCiAt0$L-t_cyp4i6E3Dasez zh_xGTC$13E92HVpsCx4}+y^epm33eWQA=Km3ucAUvH~!Ope2(?{ zt(R(bHh3rC1w)oTOA_ve24yjeA2fwQfy)f+54r_Hwq!p*-=?vU24wD-m!l+&YCHk8 z=!!!v2RN@Wo|re7a|zph-{KHBY}r&JhHbIme|e4!&CvW0N50n(h4Q@{wHN*O zD?MD+p?GLTlkcA>A~50)kr$bNAE1 zkXn3dFR_}r2xFZ;0KkF^k9Q}kyugVM9-m)Bp-ng{U) zyqJZ0Qm12l)(J7!jIe!X?)M7S=+X;USXb@dp4kbMQOm7;tc5*vXJ`7v9SbHrO-vny z0ARX1^`_Y5azi+@jzr%t=r{DYNqRU_M5kAYahs;q@8kXl;X5yak1%Gurm{$YG#n*z zHlSk$BnIn`h|iQ+7`hx34a)Vf`x{3M8w8~=({Uat2x`jP>CC7ynyi;tEX>kv%bbMn z1)cqe&ej7d%n#-3@c|4zVhFyMpM3L@yH2P0RyM>gM%mLrGCacr-uO?(c0wv+h=1Tm zes`}GKVaJc>pN=|6^f^7SIpLEmYkQa&NCzemPQ6v&yHlt10bX#8C~3sR(@0iUzb)L zx+_`A3C5-!saj+Buq?-T;F}@4Yh~BQXq*GgISH31D_hg<+3T@Mgaf{n@w1mjU7JqM(y3fg zFH8-;-f5a$qNurcvQ}bMH9#&G?)0UL5asAdwqrrv->oxSs?IsODeKO4GMm6;`BTS_ z&$STBwyGMgJsl&c)_Mpmkh3%B!^4g`H}8~isZ%|dwwzWmv-J~&d-pi`quJ|toZ$%# z5-T))SbK1aT+{=7I0VyIy_HiL=Wuhh04hNsnA+N*bOp+eP<*g>vH>zl;m}8vswLN{ zJ0(ggp_XhI*<*4ok_Vs|4~{|_q+=|7aMY1&y9yz|V*;mMel|Glm;_YFkG>n;8(8xL1 z6(yC@p-Y2-UAT!HwLU`D=h~1`ux@f))LPZl>K7i*Tlw++VBH|;E|63PmmZ^4MeV`{xIi;v+ZtuUO#b+_cV+31|l!QH#pi)jW{riCb z?;@EBhr47bpx~i;1Z=hn?Po7tA-%WeZLVkXifUn z<_%MC;I`je8;r*F zWxVM@4Vr(ACl|HHk2mTwYlB%0Ujp$Oh)#zu{K+1+>_dYuHfh*O9i+m7gqeV<#dso0 zQ1J^UBEVQX1LR>jUnm*DJ7+*#z#mrDPk%EOpc0lh5db`;C2;SjGyax>l>dV5 zjkOPOqOO=|cx0r&$)jomo<0gFYrqQj;GOMA-I{xcRT!|$#`lG|a=^hYpYaSGsc4tj z=iegfi(eEqyRNaX$*sA9CdKoEygRUq^+@9q|7A|OcvW;yE9l#o5ym4e=BeNQ%e(4& z)PEcMZ+kEH!s9v&&$n;>$^XgTEBrrnTmEC!{@>PKc_YXF_VM;;e*DDO#Q3|r6Y_fp z7CFBGIjcH&{uqUmDXTb(5|Vrd6?IWaxp2k6{gx3eG~;@j{`Y(NN@Y!}KvipRb9{a@6gF z65r5T&W54MUXgRvKt_;6${;mtj`VV{v^i;>V(a)+MU>D$IkJK?=doyf08e^LxrD;N zlKS7f03)sXFUTgN?cr?vlOaziB7~&fIF3MIk`bz>f{b4!=Fn?%_79>_3y?OC zZ*6KQRxu2Vzw*E-&IJKmSxK$))B^qtyR8mR?|_9D|E;C>C+i#qwzXtS^*~NH1@_5m z?+-p(oel1}yXE9?#fNG3xU%UCoTc!%ngMyW_$3Y_Zg+l*jB{TZEvFgBU^B;^*ti*- zk({7VlNqX6l$eXA%mSWM?7)Uur_lLd8JLN+=HYa28PY~EchWf;xM4HsYhxWH6Mz30 zk7q27w@bQD54ngl)8Rugw5m7pd026Y?reTzvDM~kpb!U~ddwKjl@F;d9f7T7ByR#x zoQK0X3}J8LJ#17;fsXQ}iZ82vE;$90sI8BdJ+pRYOdJf0WEs(2i+u=0X)4a-RB7!3 zwz%4)1{B4R0G}vO(ZP8)v&z5315LQZP|;V0R#6p5xvsf$EbSR)cCsnZQR*F6auV+K ztGb}nglk>`;dDktMey|B4}g=)7hUM#R#?%u&0Yk!ULmTO>MlxFfb}ACFo)1?6XeMA z@ZaE7^YLPB;jFD6fI)kmtbrf{sZCb_wv3Z&Jn#B1?4g<%zxDzazWw$Z2o<3U44Z{AeehLKLOhgDX6Sa{J#7RM)H zOZ8DhoXZ=%yZC^lTQ0;=ljAoqze?y-f-`s7E#a7V1x6AuTOu}FrFu&%9nFgg*(_Lh zZe_&c8m;~CD0q>s%*uKp7hy^ART!!}QG~M;S@}xZOCH9QBc1LTV zddJ|aJL2J}CN9`J<>*?}+(=HeMFVx8S?{tebx!W5ICA;g8%eYuMhoQ>1>A1!ws#sj zp<(KTnuC)ah$BCWqc~DT|5O{91G(VLt0KHYW`L%kx(g08Ut1#g_FE&lSc(tY+DrcJ zb(a_lkC3LSZ4Wd?b|oqrW9`IeYe#~{j}Q_HEB$P@!s24*GVvfwByHRA+m!+}nUpgQ zIZH2-0=?c*mL3XT*M_G+a;KjZP=`j_Ly_HCU%5Ic2`k3~ z5jFNy8QnlAZvTNiWQ`vk^l2VqtV>*0T?D@Q;Cu4Iw4HP+mWye_zBq@0NT!ks=YdNk zW}<)(S}qM*3Ca<>09(tYRlXz_DMcGwG?G+uQjDys?ey*9I}Nd?T{pWQ&=I8>PAxyk zTds?{)E^K3;WvoRx-~C;Zdoy`@KeCk4n6$MQ_y1Jf-cWKw%AUZzuH}cyWZ?_Um79C z-Ez%qE@sgL)~aw!J@L1&t{}T8oLjq_k0}%_6>U_(QLXLFK~7#uq!U-17Zbl!`{VH&XuSNMVK5V)N;zuanw znVp~q#DjNTOX8NO`__L$BM%B^=Vx3@EJ=R(kOVAi_*JJ#QBn)ObYUW2^hQ;F`xAaK z^&?=c0D~HhuABt4ISN80-H}zodzm+db@NdA>po|>|c{ zUA%|N3D-i(g@6~tj5>TzU$gq_3w{iP|6o(Y@EQ9$MT5O#`Ub_v`pPFLare5gV5Qb* zr?$~A*Hc+LsSdy$C+Ro;Ku%Ud+S?HW)~yVM`4bY8CQv-m&~Jo0yR=LXR<^#&(wI7~ zA9fj4ga#Z)Y9I*Zn|%5Sf9Oq;lNZ>vVC1Po>NA%ZsC}& zr{nBnp{#AOaQ$)D+hQ+x)!~PX<;$Cw-{$Nw#>*=|T)+Y9oGNj{xus-8N_O!|c6}^J znYJO5r(h%y|F7pI&Bf}Woj){6AWhTC0po{H&=j|0Nfat*f2bf;X)eL%dlW@?*h!S7 z4J?6ne}Q;&TQGQ(B?Bbz8#-=MFpC&iyBMyd7i?LZO5mAH*Vyochv8jk{r=s zHSs@PVthft3ld#uFdV^VG>_WOg13Yxp#LX@pz=Re z2>*MIueiPG|2MmLM9anzPZQ%$ZOx3%ByYnGf0l^+MRVh4d`>FmuvI<%R0FEl@nqvx zaF~`Xo`sE<=8k?!FghIM<~>ZZ2hn`01QE{*FM&Mv+LF!hMjdxM7jkYseWGC3v{O;-5w78@ICw@6;KNE=~#w_SPwyRItUZr zraJJ4a_TNWcB!N}C~7`)!2+o0t*NtRYSPQLU_Vm=Tu7_YldqgO_$%NEAFTa^`bUUb=< z7&|JBt>$NfS3cnyo`sPxdx0zSvns+A5@uucnQGqryRFWa z#EJ*RV@C18n09FqE~!fm1(;I|KT>|IFb(v*mmWy>S{Ys^?TLyc zlRioU%jWxG1^aWX3AOjPgUl;tZjxgtTlUC9@&=uid*d2hnc7y3RRfxKOTQl(5MNSY zE)3P2LT~@)-pLTWZ~J)ItzjzgJ*6J$K^!L@*r~kJ^Vwl8Y1dTB#UudgHHT&DjP;Qg zL3(D>TcDj})}z?=JxC+Lqq8LKm36bTdkF{bV^sD6xb%#rQSVrPfUW9ymOp6vNavgg zwFTs;P%9~$pTSV3?hfRx!Y%r8JshL!YS$piRiuh{Vt#bz1$%3B;M2jeyz)euZ_(oT z$b-(TTURzhWsTR-t4+yc7cQdQOWH;~3lcxr&bQ1$UomXY?W))-CJj!LlANP~LT>Lk zt8^RmAw^~{yNnme3za`kit&1gBfYYW9BV9PcBdkfgTzh=+F7OeOAvD2SDr0dGcMw$ z5?onR5|Ym4OzBY-#okemmScQ-41W&OO{K-ASvcSEI4 zJpH=xB|@lk2J7)Bq_I36m4)6zO&cSP@C-2LPPrnA8CA(xcVy+2B4I>>GInNPRg5b! zQQNy`c~SPc9%Rj?y=dj+_$%UQyWK)eMj8RA2#+p>PO5lafT1#jqSofIJU!R?_nE>dgZK2^jSF=#f%k^z;eOu0t5XAW%3iSt%9hj%Mlh84^Sdyx z>>FyMF}n5> zqwjiyJHvmWG_PWoEMXSJ@G128AVMr>me!Fk(u>F=?n}j!b;BE%F#7EMi_D-H3ZmBC zOc^`ZRJpA#Lp#c$q|?WmSDnP+vc@s`iqrqVfdSVn(fxz$1|1qyUkN&c_sB>;!GZ>f z5>WpHlMUvvkbFY6f;6*H|Ac-7_Z>Eakod_z(Uu1L93@`43@{8lwsD>HH4(>c!i|36 z)9p)ghYLGK8X{wOC^oeCIx6|nG4L(*4XCIp~quL^l|5lCza?<#!MKc{=H&2JKmVajhm~8&*}>G!#LQX5$koJ>T+PzW-sZpi`w|s-MLZT{za%7)L2!~1NN_29 zZXqFCq#k0WDoRvTl~-gjDSWC}5?M^9C-09wZy_oCSFq3W%0oNG9t_f{+>Nq~mt2dl z_m4Noeyr*>rO`23nb)JZ5;zT7OVm<~F{iwh@cJ$JE4y)|>VGoxZYEq5Lvpj7-M4;% zSamZr$LR^|-^!dz#!B#Wz@zx6l?}JTP*L}#NYyZ+Lh~UQ-?MF4Ld3S_U|dbxdb*zX zN2JmPIYh^}FBj`Od)KYa)}cSWR8iKrZ|%CoA0I&KHnR-u@xOHy*4F)XY&$-dvI@-C zk1YC}xB^Z-j_qk2GwhZr@+KJ~@s6+n>*t$SD(G?}j(&7nuu|n3!x)gAh_=X%Y8Xq_ z7N|O)EQJic?bGvlPd;Yues%Kx8+^G>SK>;KNd$RUC{Dz0(=`?4WbQq0@D_JMWy@=U z!dE(noRlUKv3zWbPRSI&3H3nsK3>3lE5Iq%t;?xm|2c-Wx zZvYu;wBJ8+7Cyv(Qfi|A!}I=s&T_=Mkna*Wd6{>fMcE zdFv!X5*~|FCySe&KA+Rso}|4$+Mkg9J+GrtcHwsYP5_5~jp*@{;7H|-G4*UckDmLa zU}$x6Q^AuEq(kTAMsB6oe+yB?~X^F>`17>a37Jnn8-O@hxD4IzI|z=Dub& zd!N>U$SGWMd!W3RIiK>6F*bGYI1=-F3HMbTW5kHIu#-v~{RsFgRF{_l-Nm8WOGGFUcOyW2XpFkOrD^gYCw-O}7LDaz(O(n(eY^Ky8AB`+1TC%mTXf)=*d5Ia|SN z@De(_0KaIrS-a6yz*y?mtq!jE3pFeh`MJD3pCs%W*FI&&ZoR+|6dJf}JZN4^Vk1krNu)HBYs0!m%BjLkoxdUGBajl$6oB zUWml)sC1_+P%YU}ddN&qd7p??e$1U-1OITgI-`MallgQEjo=bgOr&V#i91*BsWIf@ zxf_QS{#i)GWaWudXX%MihXQnil+5Zp4<2+A&5f|-=JES|nT!mfJ~tepO4-7(yGq@D9Jp?YZUS)0Q)rI@iIXq0t(LO5`0@t=!-b5JgR;cz++RLk?N)|#FZzYeBp zgmbTRoNN?MD%B&bkTXNAJN1~v?c`(m2M1zQ;rjV0sZ+0vQElU?hx^C9DRil8P?v?D z@yyemqcKavX8M`0NpCpS)|KZ2FI{VDyYJ>) zNEkDC2o>rFT|*aA%-ND_<-EpxLoVb-G|?Slm!?x9)oKq!9O)z+P_tC+-+ETlFuabB zm?y<3=dSh5Mx|z2o5^aT*^QG|u1_$hXxB~Z5bg@$`KbjE2dD*Z_qHvnj+S}+GnZQr zFj`kgDRrr@2Ag>!*DR~@kWCukV(b^7)Kj@4$ehvYoGjp4=Y&y-6}2i+t@q_2IH5YCG7XtS(!XQ83n^S+ToVkR(T@& zZbtC5Q2E#}kF?(Y3lZ}019M-KTExeyUV5Mo=F#W*(G#;iquqyJu<&8JZS61My5`&c z^0!Eo^h48gW*WSKFK%Iw1gyd~Bzj?wu+DaEp8sonv_GlOAFL$J1HLzEvW z3orA<7?C#OZI`K{%Y+hqR$C%k?(^L#N>Xp4ukqeY*ZxF54 zHmonYCeGi!83jshC@pY=(ACCGAyF7x5gJKU>Z~LNk}P{n=90*y9cflmwx*n%<7993 zW*r@yA37}>Rj9hwA?Td2=x{X*t=2V?H5NS>b>5makYBsglpExDaMJH=Z(qCJFFh|i zV;=_hj~zu+-{{Q(;pyth(n521){h5eu1=!bjtjwj^ve6?8M_H?9SdM@(eD_s^gLhC zx1(R$>#=TU20lvnF}r^bL+d#nYADze?e)qJL+hu9@NqvA_&$?h-3*7hSiOda$2pIW zy*gqM-MAYe3gkv%3k=}+B`)=bA>|!3ZeI?T-DTi!kG%+FMa=;p7_TI`PCp?Pp8Qde z9A}}qpP=7B;#h=(Y1~)&;i5ceD0j>juIXfiP6gAL95jWRVnjjfnMy?{BgjtCnCj1g z!uK|r#%hwso_Y~%ueh#7J9J}5j$sGa$y>Z;4qCStiyUwO$3V zoNZLV8yQSpN{du7Ucl0KH`-~r^eaw=lI8roswhmkKpPk1&`P|@4%K0@W^0)m>{T=J z0Od{qG8yO6kf=zo`zSif7_8P0d~VDo_$90FEcT7;rI+Z7R+tHUv<^u<%Gx$BoLQlj zEe|dPsVPA+{G~Qds3zK_^Y|nobsYA%#kb#53FI;{71uN@T^l8+kj*?pfcY zl>k9aczhDnjPgIKC3{*vO|u>E!z@^=vL}yb$d;?K*$Fhzwkl>y@o)5)#^~+QuSpf= zuSpM-QK-&oQSPusk3+;h;vd4wYQx8HazFpB%|~EHu+ll<^U1s^jfPPG)X~Z&_pMja zB(y42JGw051e(*Ke|;yaB-ab#KtCZ@1+IWyz&l3 zMsej4aG=`vv!SE^n;85XKBx}1f$SnDy+sv=`K{hgA}+kCes7vClBwL>*=!w^zSa&LPy2@m^(Bq_6rpbH`zK7GECyV(?ieS&NOcTg32C!E)PbtG`s#ffvXc%t` z>D`@@`(n+>z7qB_9sHvwBqbA~ng)}9A`2GE#e+<`iGft%%zEy9C(tuN3|iz%}1DyzB&!uD~Z^AJ!c-Y`}1oSd&Cd*pppkff#?+3xMtN=EuLLDn49L z_7(n*Oa=|m;k7F`V4ni^?{FXXwK@B_yc+3^f4(!Nl>(}f(qx)sAkGGdvzxL8UUcdEd8oT(MIoD%^C)%t zcq4Xgh9S!o_VJ;$*K86KmY1-q59?%4^y#ajMMo%gkhmu#-Qzi z$7=cRub(9Um{=w=sTV@TT89pgA>aekeiNR2S{B3Bz8ZO_vxH5kIub`A@n^|#L|F!2 z$>;7$rWg$6g|X%GT%T%uc#)NqO-{3TXGu$0LKb>EW^B(%IF#mE*2Kq->FA8~x*9TE z0hWU-MpZ;{tqeOCcJo`;ZKXcs(ZIyQ>4igUG6+eVYbY1{_X0x^ww2lfTnBAXMr^_R4FHR=8O6Y)0cb|2a@tM-&_Z3xw}k(o@TA8wpbxHjiAGkFyJ3fTm_OvJP4 z_VX6*2?5P4pL#upMr``@KtyXp_z2yCnVR_n4NDg~e3+^Pw}5HhlXbb@WSjkGO5f?V zHDn0(dQYDSaxZB28 zIm`L&qdJxy(+50(`ZT{o{GQ);p|y*$vAsZecONNFedBZWUpQmK`8lPaZnK1=VJ=m? z(7}v5Xf~@J>P>L#1!rA3cR#XRa7AV-s?5$R6ZGR z6Z!Gy?O{HHn?Qi59l}udyP=`z5_XnJ>JfTC71ayHG-4;b`-EO(v%!pbhZVv8+e&gp zXLqLeDaqVlZjv^YMjic9{cLi0yB>XMYL$q9G+T4`@e{!F+|knUVK*PP3{z{`FKD`Y z)L#%@pH`6VJD+dj@%VuYHUPj%GaPA@|L^XD5XpUNgY>i&cnhZq6qqpjE8JdaD&lQ8 z;dN-~b_BNIEoE7d@8)Tjn-;tl+ib*8`I7v?%VL_2A7z#ykFUWbM+%k_CuPAip8amDw58r6B-Mw~CzDQyk+FUIiLBKq9O)y5 z$%`>LXa!@9j;8*MVTv*!A$i(f3_iRTBWUhQpu3j8i?|CK@}uDa`=r_Nti-oH8maDf zvynjA=@x>aN{m*c=WI}B- zp_}N3ui0Xn!rsOWAAEu-TURpU*WQUW1@jVrY;Y4;lP=15Hp&k4KY~ZC5ny;b>79*P0a5tL@W*g~-wjX+N3?z8Z2Z39PI^9o;c&BKYmfdixib zD&-0r)ox&0;DzIt$=lypd(UvJE88(J~8>TIEiSQyL`hNqZq4a$NS zVhnp^c;s24^UqNXHuG6}*MFsbQSw*=bxLydf}zM|3PI)*Pjwv3SiuUR!P7{ZX}uu& zY~(p%fE>k03BhQUK6la$g%VY4`nMfs%(a&I9&MumWNabo=U;XoWko)ONBur?#7r3f zolNlQ!RvLA4_t+U#fiUTqJlU0mAXC)x5Iz`#qL4FJfQyMu7LgaEduvHDMqpX--_|S z#|JzA7lZre{vU!HT3ZVZ9Dqzh{<}Wn3R&crkQ6g4b@%~!MsR{D<*b}m^Xg8kb&H!7 zNZcVF(?p7uBUzZ!7hm#poN?7Er+uOO*As>fbpO9=>>K!Lymv!c?oxmhJK!(?wx@IzCQT~1oDT%TwkFH{zxkd7FGo; ztn{6Oh~D2=^!-FM^A=Z(I^Uxa^OokwJSqAS(qK#Bb7y-QzwacRJLb%v(atcq0t>5L z_1kxtb(r513gF40g^o0Md45-KWE9(}_?JFgt4h;$K37o_YMJ_0Dymd;11y0OS(vAH@G z;$gx|gk=PONV{@G)tWD@WV^CxP8U_Z*;AvzyEe=ts2eNu5>Dz}X?AK=M>%t4)2GYQ z7q~zYq;?Lo@-lf0Su3BT(yo2z(K|HkySCyaA zd0+Jp=)K*VWScw1v$PZh!5`h{DK;Z!ExI<$QJkBa#M130&*p`HwY3jx=-awPT_50c z>5T&%csTnsOXJ?7V3ZnrVVp+BiioNhp>TDpU}Pl2{<$!s37b~eF?<}nj)8L^ zbLYmZR}xiqK3np*$>n+{&$TUg)S<0c6lF8=CK-!gK(uy#;H~ewh2Rl^x9wQAp1|lH ziMQjJ)gDp1SpGEg_<-5guD&e+vwaiF=oBWqoe_K5rDu%Q^O^%_&}BbA=yJ^!3A;T% zu=jo-d~XQb-@e3riMUxGGQWJ9FSaxKgH$Wl&ldsM)?&cA?h!i_sQZD z7xK#qAuYnkwGS6P9zs7JvhecPMp3!m6*J~8jv$?n#+^BaBPuQdad`PJQ3XrQ=gtqj z(ma0~{t3SMtA-`B{IhsSHh6nZ|G+HGbA-ZxBEu)<<}WF9vFB3E>u2QIA50b#I0FA1 zh|Jd?`dl(wu5e(NJ<%4qXu@qM?>m-F_SMeCdSo@JyC(A4aysKBBY^=uwti48H zQECVy&jLjhjDLe{YWop+TJ}|Fnpg>=tiE$()=c4ADQUtHyS_r1aEQJ$6ma_}k?O*^ zG%LYqKshH^(;1V%{L;BLiy`S@+qO45&Y218%sGKEK}X%WA*&|&xKr=IoTCxEgEZ~J zSsSV4kiK8);u&&fYag`ziMO!k=o44Aj3BkFBQPGL5jvwQV zWUb@KJB=S9MbF-GV(HvhB6OR2Zn;D=4dJmXVSG~znus9teEuLct9XxM&Us>nJmE6p zPmLvx8Qubwkfv~&t)#|OlRj%O9Nmy>cyUo>DhdF^`WC3a$YgVG* z%b?f9FGC^m{E0W8GnIh+3Vv(=iLV1Wb|cXdY4FOflGs!7H&ZFIej;rGI8HbAcaaqN z=Pz5|id7HyFedyFv9vAhc8##lfq22je|Jkbme%NiQH?d*>S_ZW^$uIFuhGrOq&2nW z6$kpdikg~o+N!$hie0UaV6ZB&EruHtw z?xKc6en~SUs))>?O%Ord%Ey-PKZpZ%J0qOjb`x zOpX6fVpK+ksGc(39nAWPj>)ZAL;s7?YfLNIuixQJ!BU~Jmxozo!$#MoO61|+NK>p3 z%g7EK7&!hZ*M~M@A3hPO7rBR?@HtduD6Ek_K_*z^b#iR#8l=__JUjN2QeP(1$zOw; z5m^*?kg(X(`oE}St=dAa(F07EGKI#m5L@l!WMXsJ;UO+aSy1WLVXkF zpGS5_X9iBpRWw=y2hJKPWI1aYt7_`Vt5m{DOMBgSMn^2UtWz0x+A9?x9`+2;VFC=T zs`|`S)s&`!3gYWlWalU30B%~}!zRSQOVEQa4AB}~JjoJEi)OHNFyY*r$65$>us_t- z7Ip~%;)79qo10F*Fs=ti<+;P3&X95WkW++)8*^mi(t_a-aiCmT5+aqtnI}BTrR^k% z13BxAb&KkDNbME6>_AiC@|gBZDzVvOTzZ|Ix_E&{`DCQ1BBH+%4~ojzok@EI#az|@$5|Hr0{S&~7FPG+SA6hv{3cV_ zy>-{TMg8CHc9Ik1{n4Am$0iVqBf3@y!Ga2V<1kASEstJW-{%Qd%Nxl>B9OdkG}N29m0QwSzb={=)e7i~_>+8z`%4 z{}hh=$byk50c(dR@j^`6&G)GaNxTQU1}MzTFK&aLf}y=lF_x5GZf}k%kL>Av#tZYB z)bIAH>|#{{22&_lf~03xQltdf)7+RB1u1|cqd4&zg-|`!bmXOCLW$+&)KosZ8`_`4 zTSqaTA1TtpXqxEbm=;9n)cADXfJtvE0};o)oV~GYSxwDA&Cz5WxGccK^Lx$be*4W;w{1VA1NVt-a>*EG#ve!g<9VYcpV)6i z6`@Yag7|E2=@|!n8jpw1VJQ|$FAt>dS`i56oUk2FCuf7X9Q z@N%hwp@at#VlobKcV^*-4H%$GlxeAp6`z<63EBzmrC8MS%Rk`mVfVRLeXUJ|}{ zr1!p&rpWiUJ{x{F+nHc_&}LuK!3FRPJ2`H%v4M+1WI1dI@WF&Ta1??$xZTS2)J(Zx zXCwa&^#1j_nkl8hsrlg>34x;_D4UF(W|P=mo-V+*^Y-I zya8i>N8!k~XY^Ldyv1O%jZa5QkOM>7p>Nb>=5FI*X(m|}5sAlft--)5OCG@yE~kd_6+L86FnGx2BYy#dy(i& zDL3XYZqdz?*82RO-&Ndv(R2j9mr^!25w)}~=ps%S*+_!Apw=T8^WT4IQgnmzM7HOT z2Hy2jEc`Vgc0;BYp(puIII^4&XxQCKWu zk>0u-DcT8~i?O0Ho2sdl4LHNVaASGZLX>lr>wW+cVgAgb@5z~}EJR?$cf6pQl1K$3 z*DI|2+_#|?0f!~`V;MQDTf;u@cpM=XT9?^J%Bl(7c8#$<*@jd>Mz^NivwKp2kg>xv z`mz|B9P~Ez3Uv>C_|6!MessLsz(N5}6aw|vm|gj_7ir>Qb2!(sh_LEn{~zpM&l+M* zZ&}lsNKntcLhWQnvh*No5Bb&v%4i00Y%?f{UM0M{C5wsX!w{xn&pJ()xH|*Oe5QOA zG~KwlGr@!8@A4Ih7#V{568Ee-IOHx|1i7x%c(?D0aW)sMBmfheLa+b!;?^S}& zZEVFKicJ87M+L<93uktLkB_)S6-s~&$(Rq+v7DRF2!`VEbZvIio@)D+9W6%Kfl z{}%v;KzYADIO{$xC?VGnP<~3QFwaBciCds<<9lf#YtCwU|5fSxpfD-M5fisaGJL=A zNfoyI3lir4|4q*Hsw;ycn?k{@mCer8Dkz7A$!&Lfu$@vr6%`a%Q3>JH6gN@oATWc+ zoD*Qp9Rc-DDXk&F0fde&w(5(Qj$+$?iZV8m@@aG!3`X`iN~D}h;!Wzd^z`mAFP%z6 zoD?O!N8VcTcGmL zf|(4?>vLh|i^jDFBP1~;N-&8KCSmPipeKy*k=5{g+Za!doLBXf*B09_jAee zXiB&P{PE@ZjDT;eW6s7JL~LbF!E^?Lop(*US}-j}@8k=f3Z{}otpA@bQ!*?Jaf}61 zzMx#A64@W5b;ym#Z5;K~DM*?n$J^7~^=jUI+Y~xXb%38X1#ew{+~B_$4YaYGPFR*7 zH^KptG@`7 zWEG0t$!zMRceFSx?oXo>wK=s3=or|57I7 zRKWJ8_CbHmA*`UrCpl_K(=8GI+05avPnK;*gsahd4<%oA^JIt^fC` zBz)WS82P3v)jZ1C*Iwi-@oN#guc`en)8+?6b`MI2TE95CO&0jO>w+DjM&D9Dtur0g z9ol5V*5LQ>JqEj(-D0ra?7Ig4Ccnnuce57_wvTlhtcwnhvjYa(!*&_$9z1YKPak2A z8vM)re1ijL2KyHKw!s_t*9>+YyWZf<^vYiL4TF83-EZ)(@;ZY(K~SD#FEUtgd}J`> zCG4QV9>#;bls#s!AF#)Cd6^-|8`w7(WXCwM+#BA67RF$Avt3As6ykuH*5Y6= z62{b;WPMYxDV&)mzm_F0$I}&A{1HQ5DZj4Es|zx6;!SCRA z8vJ790Kb*rX2@@|gV^o{YP7?UJE>8&SwwU+!#8d;6e>u|8)>dDOw^jLj zM@By^F;cR}ysX?C2m~V@TH^1q*3EnT%^t7EQ3LY$!ybCcAMhZmEtpA%J%!FMpXPfE z`F(jm9Uj0mXrdt>WbY%2{5A&j7E`w9@itMl&FAJFB)hCGOal#k$TWX7YIR(>Ii`w93D z7)auf!9GMSVSi^IFc@NS4hieA*C%_B-U%f1H29FxK2M{)z8aa^=xuGK_Y!rRfhV!~ z)=g;NiS=RPw8vwxPuX7$_8I#tgOWJjVs`Doq#G}Zk&hYjaruNHpOjA-d=rjE{t&O^ zkLcu{-@Z9rs`K%#-jH5zFbs>X^@r|3Q zu9m!^!R}@E8S*)aruGH)AA`?Dn({e#kUx<>WpGL?u|SoHrz#4F3BKb}#~BhNNA#7+o^`Sf}`n9}XligeT~5Ci@|hd=7_PX=FzF(qokpAByC0fu~AzN5>(81h~D9>q6ky8cSW z*Mnj|AwmM!xY?stohxCF>8ZiqVSizehvw54h$*AxNKw8f8}e^_gj%RwlzIS-!BA6a ztvabXts&nhrY2!iA8Wsc{JVUIgcc@SQ!xLH;0V&V)lTEJ+2?Bydt!@y$vlzZ{zvXJe0l!0jV(=n9$>3x85cH6}#Fyo*Xq9{+T5^Z+ z`#JF|?od^GX&#p&qoSt(lQK-Tz(gsql*ZZQXqYmHu^O(ykV<{8?u#yPvKt%h6LL1+ zqafm+boe*@Jdyo}!8w&Jfgpv3mN-Z4eaxyh;k^>u{+B2Vl*k8iPqsUbHI4aVj261N zMMHin5BENgNbe_UNl!kijupt!O>?1!B=?DdUP0=7TiD1MHt+H<;GkCjv z+29&`yZ01jO<*&c0N>dikHFwbVA&KaQJq_Ej8G})ENi@Y7E{-DZSnf869uUWY?_v@W@o(|XQE~le24BIm zvgGHOsUFEf#5K?uX6YI?G=YXhlk%x7P0LKv(y}z&&|F%&p}DmT)U;LJ&}IT1H3E?0b5X%vfK%vxnJHkHCR-X!nC?g5P85k{F8$>?lF+&?nLe%I4 zYv$EfI%<7W62~{wq6Hip8K!VFn#ykVk^Xh4LR@nPYA5AGz9tN%Dg7N?8^g27r&b;| znUZOCZ)ig>rqqU#4IWkRw3=!@UA^1rQ*cqihGp?OQorGbmP_iFr;RYQeEANFYOSpW z$aJ$p;&CiI^w7d<)Mss^Hp<|aW9G{JRB>tNXY29;LmSP{HZ%{r-_XVo3&!G4z7n;L zeXNb^p)_LIJ6e6LzC4fFIjw*l)U^`~ei3_L*T$nZYZG*>(9kAoMY_D$(2BJZLz^TI z8*D#2U}%%IQU-ttN`n7HHRN;fP-vBXoH?O462Y*Z_|+T=wpm$+p-o}$GjNk&n|Cmw z=~f~s3$=8Rm2fC=G^37BIvET#&6F1v0kdYuH^fD;4}F{nn1P2g?^BkzrVMLK1$k0>x59d$V-&Iwy;c_uJOo1k&fs5=;+Hmewe ze1;bZK*?BpJQ$SAu(!>Z2(R~8Dq5>^e);Pl`2+_G$>o`^S@g!FuhmL&FzT|HD}<3=+DUYnWoWatIl49%#pd{z?J^h?D{PmALf-9F{&0l)nMa5D3{E}% zQd;s&@(BI{LtCf~h(p3&%4uke$g@p9hUJdBR>ojiKP{Ctw8faTXys_9wIx~wp}o}5 zmZ4+RmTOvHINS45Rzs^K&?_+G(pH-AtBzkWl25%6@KuIZP4+1-TD3IQ-eWJX^qh%V z^_jK?oB4wow%OInGYzdqTa8BUOb<;aqfzXLC}XC|NDV#}z4_7gYA0*8x>iRKBr*XzS&B==+jI@n)W;Or;&FG003TL};gJ z8w~Aq_NKvJX0I698SG64Rh8sc$WX=CM$CK(X|KM4S5zh|8lG5Djp>?)Kf#=sckgmZVmbG)f(_XGjNNJlNnQ!D(lhl)0*H* zS`#?>1sV);x_@#SXQu4!0s3Nwd;QD{Bb(&kS;tk0qaXY9ZrS>_L<~hOBl%Nn(B(A5R&iwh5=TqTBXI{1m~J^wP|d! z#awQ!NlRRSZdT^!PONmpaIG0*S#NuL>-Ms6CGD_LP&hH!8t3{TK3!`4qAzn}@6f06 zUQ3#cM)d<(s({T&x?VaSmb1GUDB7K}urm20T4@x&O^`Jr8V|~nP+zQFbNq`Vk7ZS9 z&&$>goBNg3%NPu-tln5(TUK3HR!-Yg68;#BZtT~k9LdlaT3)kiRb_oWB9Yj?A8A{* zxTZGo8Om?dZcZF65jyeu#9)6}vX3Ns{fMpGtT}D>5G#5i+Hrdv zF_>An;@F^SR<6M6(1JODS_|N37SbB~W|}jTe}&&W1~XGH zsZZUEwD8gY!qU*>yBi+wa)+tr=dEb@Flu5jDXHwGSl2K&;r*yR?cse_BpCH{S&23p zC9BET(1DL;C&8k7KS_GVp`3J#%NH1|J|?|Oy_NxoyRa`h)(eC_Xj6|6k`Sa%O9aud zspTSME8GZsS@g%k-nFC$gpfyU;D13~df6qizt&OqkN!>QlfbK$#pu&(LggW!ie!7( zQ{uR`nQ|^;i+(FAytDyd(g12bZH{2=yP*8xS}MI@mZThL+2X2-jTN=EHMNNT(z5!p zs_3txo`+pepAb^HQ;j??^)hGLWG2uYqzKMl5zgTD_{of<87Bt0VcH1V z{)(wAvN*bygu&^3=JBzuq8}KetC^MPTj(zh)L=k7h|E{~V+wi6BqglNz}tmMn0Z=q zAi}>kY;XX#$bFe4#v8rwx>~_QEO_45j+>Js53WGuv5IDaUs296C!<+ zS8eu#{0OL1%`v%xp0-0A79Z(3{-nZ!!ph?V-TO++q^(oz1lZSpiMEIS3wFH6RV7JN zlVh;I^N-6ol4MmT|6I}KxBhU4+Nrg&hbbOw70MD{vlmT+V=)SY>~1?ql6Y6D9r-e7 zuQ2;=Zo+nm&MgTwRcyjwxxpLuIkx>ux)C30U@%nCO4SS6$)}RG565QFy$Ui+Y|Dck z^lG|4yqdI+t|gj`71$ZA+3~4Q0>cihkp}p1Kzn?~fOj#K$d9LCV&s_A@vNmx?JSC4 z8_5+gSbtobTPDjEqi!Ej@FdOR?H5!ajYCDiYC|Z~AF8cLW+g$sPj-#Qw^@az{rw@W zrivX5#@b|$AJ$^OqspOEIirIjj*65cN!dK9xlY^c+pe`4k2KpqRG09dFvMCtwshuq&*5*#`W_!CSB7Z<-0&fE zo=atm6{+eL@vkabX|a@9U;w3hqp4-8qZuu}fHf^oKQqm0oBCsajXt`wvFGwgGS;hF zR`)*vl>)ghrVw{*-!&iSN{fDyGTk3m+k?lvnED!g^A}f2O0v5`v}?7w!ma=3s#uAC zMQub6b8HO$*nfMf^-l=UU8VX(a!zo}5tdb92)D6pP5ttk+RF9j-}78rR#`{ZbSY1=T9QEJ6v6SLqe09{C>bfO-S;L=9m_k^b{WT5)SKH(9qhou)z=VM+|;|KWy;*?0JKC(cvM!*Wlmh_v;#Z zfLX_ytQ!1YeqY=oTXWTFX_eY`iKZl)u~m?A*o?N=FJ0S$%&St{H#2zN=~OHL=9lv3 zIm1r*L7i{F=XBn|cB=D@>?U=-ncafz zZdL7W$KQ82e&30|?_#^`-`~OCyV-Z`-`~UEcPBi*C*k*=xZj*UkyZVEpWRO*VGrOr ziuZ%~f3L!m(>@aF+-05jvjccuO#3&e^CRq0b^ZZ+Or0OMo(2EYj=yhG-*#~1{m+shQI$n-lm*svK#sTbyf-X2=9|*iT9-mLx2RwFJ7;81L zXsFx=gYiZY-YDJ&B}KVu`(V-oYVbe8;~6jvkI#Wb5lDwCAPcU9A#fE6!__bvo`>=9 z0u;kf;6(T-%z>Z5LU<9Dz)MgAKZo`3GWg&XI0s&ZOW`&62K)kUgxBGAcmwvpFX2IW zlO00n3m}ci#GYo)s6W&C5PO#W7?`>uLE`F)L`kSCVxm-6BvxrKhCRogH;E3@@NH`8 zBC2-6Gc;IP-GmCxPQm0*BM;Q47w0a1_ML zNYP#xa{v}F*a;a$IN*g{Fa+-zPr#y`u=*gBtvd*dQAo@2W@aZW!BhTTsOW^H=GC%J zSYEsrDm!6C7pz=$5USP{m9Q>YRb4d61T}OgxF+p|>idhRg(Vv%182ej#C0ebY#0n? z`7nx&gh^~PoWwj(#>T*MHWq4F0jy^yz(zJ6n%M-{%!<|6iV*)A$Y-yzUm)k!LpFPz zy`h*Nv6&xXzhrOXh<~c+!Uul}Ymu72Vs9ZW$W+WgLqXiU*5r9jl;?XP581v8#vg>$ zIR2Ay{IxlCols9tI$=%DTD!gDpPv{vRzO3Se_B^ZqBK6@)F;zt|c{WcO>JO_4wd_XZGSbPB51>kiF z-aq>k5^uZ};&93X31YV#M_Gv!U5TPog%n){vsexKl-1y8wMfM}IESr)%h+1DnwtO+9crrCX7N4tSF3R= z_QsW2?1b4OBCLxyJm z{Um5-CZgSv1Z_rpn%LfeS>8Zte8--I_M4M<14bL8SnU^E?FUfjhq?{W1QK)r8DIj5 z+V%__jEDWhhF5RF8)aL&9q9A-g4?ou$vX%;IvC~XAPvNDp?dhI-9yxS>e4r=JR2jEMnt~jRRE;uiyqIndXu!~VWFF}8L84P1z zgYoQgn9Qzl$aASJ&!y~R3=wT3H4L%&#KvZ;g-wy__RG$0w^Fxw`}{*NkWTyI0(^X7 z3=!q-*;SCqu0|xjiGpwqOvHFQhD4E#L{U5v6A_6|ZB<@qsd7e4braR%1_#s(8)^nS zOsa~&KC^+HX#w+C_6>pUR3vt%G74r7H#>Up*gbg69-;!0M*;#EH+`PO7UU<|g561M z!5DTV>KWi>v@g`%3Nq9e?Z5~E&lm56dCEqc2I3OMm`l?hh0E57;<|Ox@|yeMD|PEM z%W>|9uht!auc7oLNXb1YjrUuC$|xuhWQ4KZcQT7fL23Fjf%i9Qc!H;-5nA^&{lqA(+6PM)i2c!H!ag zl46J1h=Z{CveptIvMD8d;VKlItI4=@X>a-=NW2f^>Mz9=X?r_a7+dt zU`wDWFqzSaa4+oM58q8RVn-Zel4*-crX|uI_5(i90=UQmXv6@1F98|~RScS8Lo=e# zcqY%X4FOka*jO@(cUMp9gnRP$!yd%2+Jb*C-P;GdV*;K-Eszjt+<+V$=omiGPKXea z-QQTNKfL1En8b6$E}!S{K}bvwAIyhXIDE~rdW*2P`*z0XJm07IdoSEiA@~Dv!Fq{# z``*3qAd2@xaq+c@VK(SI2a2%2g?zAsB8zMc7xAHdSj=A*AzH(Eu7%d^_%cc3WXoS@ zd{2}l*yk$LoPDHRcpEP}Nxix{VLv%M88eZ56u9_kaPu)Rl#hkcd>oSN1V^D@vW?7S zi(Erd&hq#OBz80fGVkPDrGs>&{b3lY^O1<|C#W2v2+2*M|V z!HZH9FHD>a7{)zuIGJ~%I2phXLoTAUT*r}mXpbZdt!7JH#}t|Tx_Ac+@5a3Yaoke| zl%tyRQUo>C!MQOuVq@Yt=Rr$4ju%*cUTg{VXyV+%yb}&C$RBx^=>&)}`TO9J{5>OM zv5AVY_zYyziIB->!U%p6jO241Qtfo7QK=q{j3lXc!w}l~3SpT>fE|XBq-Epz1Ph`0 z77@}d3?5BX*aeP3rrTYm+X`EVJW3Ag2Z^8-_Xvv99#$5pk8#vgfIAy`@z`K^;<}xf z#L_i-x0tc;oY?Cev<iz>HR5AGea z51!twd}MacGjwkZ#xe)sS?P$Mija7~mm;f|p$smETwV#|_$rvjt6>3O4J-M{a5}Gp zcD}|@N;umd*4cbAFICJqTL}b*TsW0a!6;0?IH*RtO+{O6N~knGgQ-&I(?;c>_)JH3 zn`F3)@=r1bNSI=AHe0kkRD{vj zFBF-~Lc(lC-`8Dsz-`l5!>cza)Lxf{SNn<5>+}*U@Gf}*ez^lynNqk^!FbbzQ4-^h z4JyqBrAI*>fL|fgOyl#`ZkU1qf4u`kD7w=Hzu66=M()6fRKXt@d(TybZ2oPGR<$q~ zX>~Rl{}39D2xRjPbaGpugl~m1yk5$;!7_d>tl?jRHhvy_70+Mi7s3tvBDj@*74GJj z!+rb;*vGGg$N5$8BYurTA`aQ~J!DJ7Aw_Af?#;qz-!wKEpnVFcBtZaz-oRcY~{P) z0=^rr;}1Ig)b%!5-V6}Q#Z)N-=DAsmFYMtMLLTcvX#DzbRcJ@!yBkhOeCa=lFQE;ers(r= znr-L^4HefY>!>NLP-{OSe}wkR!t2OML_0IkTaUZ~{!=S!3%zG+EfG^{kARagQ) z8eE4V6EnrbFkRd;y&L2=_7W~5A*4fQ!wWyC8D>p2QgOC$ z+nV^Z;u(l5Er{7rAm+kEF&`$2g~=7CSI0w;&L|2Vqo~)C`N&4k!cTgA#-00BC>zwB4Z;%6PjB#YSCOX##YX>iAT3hqQxZ^2!wW6;bVG#ZS-sX%V( zZP0Cw*-dWGZkluG*=C;UF6v}MQcMMjKyR~~JivpNN4gZXj;!3X#e3P%>PZi>Vc&s9 zydG|rEi}0YJwomdx`@^+%$fwfbKOla-i*-f@`P0Z-;I1SUw=#PF_XTA*bVF^?>lg^ zb>q{WFoHVSiR_>|=*RYB7^pfon@)(nxx@Ji8?nRL%cM@0{{(Z?o*G~{UWQPm&OvoQ z7lw(8Ay-@m9&rVX6<5M6@l9ALu7Q)qb+Ar+3r-U|&|TdGXNjAkRosd$>o#;*x5IVf zF8G$%1viVk;XZK>bRoeX6ZgRr;vq+B`K&E)&)TJvXRXqS20x^&T&>hH2QpMiFXWo6 zv#bfsqZ3QQHq)ytrVleoo2_`yMy1lB{SIyqix;OMN-ZO{@p;(_KNgWyJ_LjDG>I-d z+2~H@LEx;a_z(;zevpmnWMk_gWOz|k>iN}zxkE45e z62pS0khVW`xc6u=CJ)B*4ov77(rqZ;%FnUf`z%NszDVci9)^K<#H%kIfou>uKM#N6 zFTl9vyd%_c>=wsMGOu6e=i64owElWgF|%f!o%Z!%0cLo8O|n!8w;&8Zj(o^X(r#N6j3%Y6=FldU$a^f6lLXizalt%KYP#vv#) z1G*_@ZbMyCIl`QCHOxZ9ZY2Tu(o{7#l@!u6XkLuJYK4+`4*B~$hIlVPo%ji~i5KBq z@e=CB&*66QGJH?GihA)n>=SRm8{$oPSG)y(7r(Z3V-8H`7pY7INof=O1B>8v)lLN% zE67XF-+-ye^Z_U6vN#Lbaj`AE)z;MNAghQ(v>n8z5zP|guit?#eh)d~4-VZJ6hCE} zgRn2LVZUW9zPlRj>hv9Od68Nt_tFkH@gTeuBmN90k54pzgsZ}l(!Lwe+9o1$<&7N#H;-4 zXt%Ahae=OnK%!j5ueJ#P6`JIt0EiZps3erFFqa05QB%|h*-DxW&y1fCKgg=+uDgq^ z>SEPZ2U*QJvaf7)Y>Grh?=l|-%8@Wkj)Hk|oP$%#EcEALH1;YtW8!b}Ypk`J4VZhl z@ac|{1MFn0S~N%IN-N*0q$^6eSS?ML9H0&49%uD)(hjmU>vGX~t);^$bU3w(t(&7$ zP)F~rXXs`Ru+s!h!#{M8ZBRo)1L}<*9=(sz!|C|{4E(>bi=8<~9%Nn|q+(=4Y+BFc z;zSrHi=b2%Bbp_!Oin_}IT=ouQ=nN+L(a{F3*<>~iJS#jN^`EO76(`g#r#@+9r9%v z2JYAMZ=rgQgOm8T`3}Y79X5}5(4US|Jl>&JbaHh?D>?;SiOI^V{3dH1Cz02LakB-3 zR&?@MLODPslr`qcPL81HuL9chux2(_Vfs2&vPqc1WkA%BNy@do5i)rczmM`nbwoz;BfaiqWHH z#2lCzrcZO02vnhk{-v?k$#Ef^@ALaDIHy}B(7_n{>3Nt*VYYKm-hOtrwYtSwZGGAi zVGmZdcu-dlSoO%k{6Rh_R*!Toqplv}d#$dXv(^P|qFFo?ll^zlL^WMUr=@1aX;8@2 z|NWitr$H=iDp9gYs$yDHMYCWuPuK<5=cBWXbh3`bInnPz2LB!y{2ojN_MjWP7frzZ z(1Pg4hP6p0QJ}8&scDCyP|G`=b5X`&Sj@6GeKltd%x?+l_@d~tTHX5OV_ui4En6b_ zAluT#w#KMxt_jTmH#1NR2EY)Og(-BlL*~ZE>&8IrcE8TEW3_8{A4_2FE` zCQzj%x9Q&@P{ps|FFWC%_DX~uBB^c)U^EoJBMQspJo0$w?wUcwbpH!k>;&< z8r2DRl+bqy>`Nu|kperf+Fr^vsS9?Epru@n4;0v!W8_fo4&FxPdI#;?U(lex2NU3L zc>jHv4S$D4@Buor4`C&uxe-1BAN*G>sXtVf%a*!(nSI>;Zl z(?RO;m!#+H#E-y|H-4VKU@L}MdBD89B(5IoY;Nj% z922ZiSLZ*WP!~b|l>e*`pE0Ds=SBWfGF}esGcRemFT(jbe>oYP0ey#aP{DbHzuHYm zi&01uKPKrxNFP;zUQ5d2L?4ubD!<^bCn2f3ZzO#qY2)<1HU4D^C3PLGlD^4*m6VWr z-wD~N0KJt0P}>ac;B>;!mvn z!Nq?^`2#}#J^w=zmWjTx?2r6UNgDIMHU2YyJDJ|Fp4c64OELZe!QY|x`Cr&YczzOw zvkU2QmWyr1>x&_edGUM+wr;}nrFf=qz%Iic=HvM*c&@?oSMmOxc&62zpW*p(3G50y zU%4oceI3tN;dzZ*!EVEhxlBxFui^PLv5L;T7#`;(kjqb(bNCsHa``rSA>R(^Y#C;I z_?)ej3)Q(+T*PlkOJ^Gp4z<5ae2dOnj@HUvlj+*oT89>bTrmLAUk*5XZOLg@d@mujb^BxKd`~Lt?O9u!!+z|@kKL7x;y#N4EO9KQH z00;;O00&RDSO5S3000000000006zc#0B>?aFB?*ZHd6`5oh{|N-!N~vxI3+J>X?99;oiw|o*)7fW2Hy~% zGQLq>-Yw00qD?yH?b6&KQ{FE;+!^2x@Ld7EoA(-gj|}fC z<`43{0h-G98N5G0Gx$R#{9(Rd;65VF0RcG};0O4l#rXQ5Ons=B?&6OLw;wn769zvV zpn2Tm=YNvtKg;+d(tA{z#{x8$KPjX><>ybA@MrjOgFov%>HJql#7_xpPfK%Hn!W({ z^ARC&RGMe}d@R6U;4k|5S%aSw3}5o|^YVPb&tLZQi++AdbaGr6e_5KZ2&Z2aPQO;d zU*~TG_?!H#68<*-i^2bD@W1)_I|BY)f%!mBt5aD+9bKKO|Je(gdU_DW)5hDa|N(9qm_R zpcFM$rk2V`nP}uS>5Y?SJUmO4OK*ZS6QwyznhKeBr!;?-<}cE`E+5X8-W!HGCqSQq zM${xVIiSu}Q<%JMThp=aOlET|W+fWBL&>C-WC}DzW1;TWR48RJ6?MnEn95ei6J52* z?#}t!YFEd*x~#-vrs8nI!kow&!0;-j(W!WEG`v2PNJUf8c#Nr1Lxp-n;jLEf_E6{c zP;EHg(-V)?whfpGT%&pu@klysHKkMO1jyDG0PT)iu~f3wnVG1K#!^-SoF;46+e0nZ zj-DUlD{ja|Jhv@=wjPDQ(GS4Wfbt++MX6${zKTJt_Hc{{`t^`TUF z>vXNs#mhipbixY96Om+nI@%qv5=<8kst$W*?Ha2mp4i8IChHLBeqZypp1~Q|`*52-DN^=GqZGvq(UACP)3~Vh{r-jk51$^m| z%s&$)<{VIKvc%R;Lp&WzL5ya&OHXK*t*6%L^^jx~d^c5Rt4Z8(w0`gHwPKOBXb&b7 zM-riE%=T4p!b&A}L$3)dju}>jY20-2{e(DUaz!*5>gbkH-;!u7np(yb8n!3DEfcSr zwSmdg5RZV-F{{Dm+H_Bcm1q+-^x6xDx;KOpQF(U;J*llxh*F5&FqI6ws#Gsi$3IxM zO(NXcnAw}Kl1boc2?1MUG8OF!*{h-winYwm8-6*$Nz)U+iHb?x^|_03`YeG zq3-UEP^?XV*;Q_V>90}f*G>#&}%_`=)QgnG5RA@3RVGlO0=R1lR9Q)$*( zP4R>dF--SYuCl{JEE=z^-<`7R)194SoYj?C# zOOfnXTRW}p#+)Ey?Ld$nfzM7J5)spcfx&HeZzjO49SU%Xi}g&p8%i2UB0XpG{t^CtxjN-xw58QGg7P;p~#T)r1lm5o%G$oWbRMyl9kwt}=v zEu%yFvQH>2Ai<~}cM-reXGBE<5R9?MHNobTl+EK^WMl;8W+GP68ROH@kvs<1lfJbem$RX@+{2p{5(W9h+xt ze3>pU;GAcwi)r>=Q4b(f)rG_9o^-cJfeNC<@p^0UQgoo(H;=50%ddNjJ96$^A|-wl zQBlA7I&^U$UY^;tVH4Hh6tA);@TcOfsYEo^C5w2LYsK56z+SO6lx(qtv&agoJG#?K z?3PR%Ph;JeMh1?^c4TGc8A#&}>AFI|<|vS`tQc&T7JfaIdUsKx--W7>#60ZR&Fex@ zY~M43G83a-6oB$-I6EfvqOlfx$7Ccj>w0cMriWbF<1M@9xAdN^IVQE3?9KDH2AaJU zy6$O8cXwk3>Y9wuP7=Ima8DUDmNo00h$*#FYc^1hi6+|;p;$5$wksoqPVjOHz4CB( zJZWWJ)vm8>MM_lHUjeGizq~1a_>X*sA}3}X=9E%&jN^q3B2hF2RR^NUjfrT=E{424 zp{{6Hlf%v+kPGg)gOh|4o=GpzmrXiEPnq-;X}&;TH0fzNY|>ZhDW>ITdUhsMW}4JT{U&{#o;T@B^t_=e zO*M-b8mh`v)vCr&vrRQe)tYLqnrEu>)di-SuP!v{Wjb#1Cces03ruy9y4X+)O|?iZ z9wA?acFQKcM8^%a#8gYwGGX!(rc2H+2@0C!hN?4Fy=o9SR)`#p!g>?-b*8$Mmzwk= z`mw22s%BHIV!x>_Q>(GdbGc`Cx7FpuVb_LeVt#tao(0a;90aj0gQ0Gu#>nnq2bN+m zQyxcx(O6KQ)diD+G$>51G1XeNPI~K2zL*yZ>zAAK1U(66>SRrUL{KNUU}roL?9CkA z1aEk^p;}DUs@gz$aJSbk;Btv%FE(*lK4a_S@l-OE2=&4eTjP=B7@xXgtlEIb#<3hW z)s?E<e7C&K#fpktm$um?k-E-M*K z#ldLsx@c-^P@;4&uD7%pn`5YJOm(f=!gOI%2rD`wa~%Z3frkh=Q>^RQW`$Ft4FrLW zdBO%07W@u*Pf&>x@d$Ooe;mCQzz!=$23ipmP1Paj>zlh`@dU8hR!m8*$(STKdzp*K zpy-)YT@Yq-X7r?!sbDOg3Oc94!4O`yfG-L=~nA!yqaG_l4Uaa{Q8hWzx@8 zr=jqzOKmk&RFt~SP}{|Va!faPaLvTMf%_$`t z4i$vNj-9l?`l?`d&OvA1@a~zW>Q-&yJP5Mm^Mb4{LQU1fD^aeRJXysI6*pC{+JV~D zR0(>6X+}dRCW_Gs3~C9Ada{1z7!Za@Vh!;{0x|8B6W?V+q`C?2oC~fZ!JWvh7u4nP6-;i8r@JH26PCu-&`vl& zOq@}|pTjvM99G6M>6`RC(^)y;>N1Dh+E^yfbxg)r(iIG8TLv}Nbc_}|7w3N+!`D9J%7)A^_0gf$F= zK@oQG@FCncHKMhE<+`A<4hWW(BQca@cfNZMc@t!8(WA4Z< zh~(VS7jiC_MhXksb50{wU5AuL;Z)Y;CTDiKu8r;$pr5Em%mEKuDhpj44XLRS@!X6s zm$S{9P)hcNJ)vE4W6<0zpQjBS$L*T~Uu%17TjLt0>8IIj%XIsM{fsZ|n^!eA4~LrA zWyf&nWv{l*{Hji9jvn|+0q8Xpi3}1*;C37S5tm~BIK&X}wvqehKY$UqXmP^o31KfU zCv9F-wNX3fydzdL>gw0Ev^B0^8YMwBq%R^`OQ2o)9~mF1!#}bSE0SV za?QAS=&R7vTo0D!KHKP%`gb)u($R#qHXd86&j*WJuV`p!Y+NDs^flErua=H00IrUU z4;lJCeO)ICjmlMSzU4DWRTj|CRfWp~Z^Y_I17(puH}fR*(Q$e9)O?_6=MU?6_mnFt zGahTO&jRdi)^I#O4@tobF5$oQlyfzv2?N>Bo!Ol;goU6AT^GtFiky98aHsvYWo+B& z*iJf5I<{@wwr$%^{;{2OY^!72b~1hLxwmGjX6mgv^XaMjJ>PcK=30BNm(qM}e-W6P zSX&7Mld{C(c6xySO3lY1;sz0( zsyOeNaq5HQg|!8he47kH=RYQz5<*f&I$Hb9Hd9tOVGblefp8WHYH3G@M+Y9lPcS}8 zChdKzT{|o*hA|}f*2^kqCtc=+05=SE&;uh*b;4rNVG7nO6K`E^@W#qKiymyusNk`8gAO?) zDUSeKgEhJwrsK(e8p%{;hNlQqMjNxg^c&$2k{?k7lB1P7v=2~)sxr45gl5UaINnw% z`JGynBW9iXy38KPUNN@^4S>qZ7S`w7UaDSN`ZO{0m9Yo`iYcB=%j1Z-YGX%Q%e*pr zcF8Y()Wu<_g&HQ<(r|9(w!4pJvjNSjL`L5f$vB$-(J1px8E;?%_(|UWQ0AodNT0^{ zB$z7VU6d9sac;r8C}dYfcze9J;Ht{=S&TEw*x*E3U^$`T3Vmjn#e95ee8~3ojmTY@ z!91B*^4kt0R=P$^{$$~vdo!uL?$d)s*5U#ZrHHeQ@PAxHQa5BkRJDB7VF?} zf*3W}E=BWwRVUyOK|NyIkhBYkCtCK2B(HYF0{Ytx+MNSBb zX?gZ>(t!T;0{|bFnkZ2*0l%P9to#ilpEP5BjuER$G7EvcSW38|7j)_Atp=+n^QO zFp8&Hv`7Ifhs?NR#gk%SlwotsP3g{4+YVi;a&UUoA`8b;kk=nNs%q~i6tl4BTXLsn znnLd<$0r`n*O(80r(qw*Kh=+2abKWF5T7`o@1t6-i8y17C;Yq+pJ`vuxIw<>M74Q1 zH#7O$^~a=8Xz6=SGP_Cow+~Lr1)QN?2u9P_r--qfae~_XSexfRb;%|*9@@N&mwy~p zHB4!Y#t&cc0jAUE^>+KRjHHYDpIMibv3yvyCN*~_T1$^_tC%onDVx{_(p!J0w+^Jc z{Z79QW4iWdx*pW*g^l%PcM-beJ`H-{>%b&=wkWCzM()5b8n@iaVmsTaQh4q!ueB(; z3Q^Eo5Z(Oyr2A&~Mu?>%?Gg9$knEuG@m=f_@y$nvwjJ#oPYMG)eb;GfHk9WQO)h{c z)C)!u`VIASH6nr#JgFgaMWBG3u#nS7*(<)3u&DiV#GIgT<<$i9Vb1$?O$_sCE|9OI zJdfV@3W<(Zi?pEpjgsz3e#u=k(r;|`A zF|(iHBeLZmbrKm-HZ}z4tj#&kwWysPGU1_pdPUU6V)A*3YJ`X1T&aYWRrbt^V1-;t z4Um4iPpi^5D}7+8-;_GVcDjCM%MEZg9=G{8T>@>>YK5uoGVYhG@$=L) zy-@G z5vHdT{ERJ_b@B$`U8g9f7`~U3!<~T~_cIJaj&d?x+>XrVV9NaB7JB)rzN%rO3(nOoTgJb$ySoF+J zjZ%_M#Z*SJiTdzt>yLBy4Kc?Y9rqD4A5d7Mv{&OoZR@|5rqnYIZ~qx#LLFV?oDybx zduv2thpzi(exDR?g@R%NQxaPJ>M1UJQGznc2c5WR4?Pt|3#&lKc4MwNWAsa(R-`T2 z^#)Ax)_ra4&>8n=dkEc`Ft56~2b-CFmXZJ*i(jO!hfMPYc?s90i4AFF=wVT;xa{_s zR**Fuzu0jsJ2NWL2o18bduA*=m&HgSzuz4@#X{tk^Rr3lqqOja(g2b?uJ}`YHI9`a zz<13fK6NRaK|9QtcEWB&+@GD#73J4R1uG)>##n6jO#VhcpJDgDKGgRLVLk?rt@;kX zD0@rMv+YNBS>9G>dD{`?CfF$`IUL zA@^%eCPhQSo^B=ri7YvP9;_eCJSR_z=?yF3@U$u2?6=-bkqi&4cqQd9TN7@?nP{#U z;?3&=n%=LOTW`+Q!oa@qanNNJ5+YxL68ki6Zcw&F zr_>on`d;CknewKN#glgiRykbKDRyc0-_1OjiJ`41O#J_dQUL?N$jLrCMAfyU1pUXcHVdkQIhp~jCZDQZt$3_8_v%0@k2<qwy8b;}pIQaaTotFpXmd0M5~ zr&6;MgL+bek||AwPq1|q;3UH*+=@Y1u#VvoH%HJt1c+y484rTrMO{VNvBux4^-sq& zXU=7DCsDaK1?*dCa~HK(n_Dal>u+`fNvg7fBCrs469Y;$>>;U;&&}}|e)o(;wK*uX zG-yPuf^gDL>|Dm7)!4NSsBA~$s&6Mt`jGH9JJz*usMD~t-~A=8$EFCs`gZbH$6e9B z1HFx=ajx1ZQejq%SHaSaFUw_RZ#thQR}}JDeFp{IbWNyiB%7kEjz{IFYXe$&MX))C zPq;3@b@yi5XDi+%vw6PBI%x8iaCNFujj4Dhr0~&>xhX$>DQt+j9jkbHC&6yzp}Sz~ z?ftd`)$9NC`1!FF(@;SrqTm>3z2WpZPmS1e+FspOy`4# zp*~4T7rNH|kHsXQU`}Cx64@hOils*HTwPRkC)m4j z;~Hi9Jm0{U8cI7C@k3rP@6EnP1ks?H?~n_f zWP$f`m)_L(Cm2> z_hP~Tn(3nU$<4;58y&nCeR zzhJtfdL>!rYKM<(>HP+V26@yl{5h6(jw1U=-_(1AYyC%`VI-Rj7{%V*dx}2metd+C zrh)JBC-lzxY9f7&_hGCJygumBL2c(A_Ra+mp5OS{$Fn|KVdmC@DxI6>XtLj`glN2# zd8hhn#g|O2w&k`yeRJ}Y_NpR%Stb*JpYkWleLn`?oI@y`7QNp1(LwpyVE9H1_+^0F z@e{1?MI0D;E`(IjMp;NLbHF2%&Y>VIjzBO?Y0=XbL1qpwmTK^)xB4>25tYD1Vo;|m zAsm3d%T7@lfjW*Q+pQQqP$g^UO}jmkvpX!lr-oi1(62bA>=Xm;ew?D#L<1gr)V`E( z!WQqf8l`;ObLEs3TFT=1k{q7OC{d{t$vcNXyHWdr1k$MvciQLBlmgN(>cl6^bq0S`jO2e5!^7k>poWQkQEwe5?s= zt@1jnn>VXlS}IjfbDetabUl8}eqs1J5gz9{U2z_NUAI5`z8=*J%>Z%4@tul+iAl}| z)k@y75yrmVx_Aq5{f+PESrA`Kh=j2(4%oU#<53X0cLRgSgkLg$ddLRt-f!?vz16tB z>4%=ZUwY(yf8-EK-Zmh96D1R3ztlhICG1i7O83i&yv`KAI}!R4@$@E7|83gz_&y{l zdsC+?6+ec40Mo2{Jd{fFn< zfMUubfn@R{6ocWp$oy3SjOL2aYbVP5Iih9nb3$e>7R)kC=79K_gI}|({H@c8h8@l` zsj4N>(>F@!D(~i{ahAr#%W^KP6P+hDBJqB}Tz@l(bFRQKDhM=p%86a0(U^On{3@QD z^NNO#s#%;)>)cx19N;|q`Dxh5rF#w}hRb6e>l<9rt zDAvP(GX`MQPJ)gZa7T~%^A`%NVL-l?bX$w)5T`YvFjQ6c`eQ<&%GGamaV4GzI*8z< zcmZv&7EUBtModfp#oX#9K#CzjN9t|TmY#cYK~kwNTR9=AF=C)W)GfM+9cvYS%R+Bp zhP$tGVO__G(x^4xjqh5xc^1x0wupD#RG6k75&oc4NU?;v%aMkGCC8X$$izK|)to4i z)d_!1g0ujm?5OS2T{95OB8H5v3l%1s&es8j+~2M07j`+A`x*Nz!qrG0Q)}Hbyk@;5 zQmyW$gNtgk$))QHX?>~crdU|&L0arWQ_ZKUk*W{IEvZ?xUqm@F2~ z$A^5C1RlSdc3Hr%J69^TGL5qgxiT7YbuU9u%RTHsr+)df5EU#Lu?jk$`h36Vpsb)$~`;{w*OeEys$c`_s;%@IQ#mxCX@r_r#-xU6Y2+^#)z z^Z1R5r(m_VfV=NaIE@8GGd8e4$k0whjJVwr48CQcatp|_lyatrS=f^G(_g!XX;EEN zuyh{Fz`pVwR*qt16btFH-J+~TfDMJsc-~zsuoO*|#k0$khSH%6x`kK$2E!3YvZb^?-ENO;lQ3q%$?15Y zD^iwKb*H8AJS$Z>QIS%~M&7K@ zDPeVrl0-iwORhs+?2^H)C!^RBj5}IP*{l7aOXNubw-pF~DxRFs*K&4Wx?D_S!E5%q z_OWBpOzx9j!+dH9U>{|!2;!1CBVI3tAB4JJcD?Bvuem}|Y>gjYM9^93H2I;!BqE;i+Q&>V z>FrcAsD`CJ41Yw-p;BNa>jAkVpjNiX3q9SLgn-!schh)&$~j76{j_Mld#M;7jpg(w z&tO@N1Yyxswiwye(oIOsvW)X&gb>8-+9tj4w!wUkbCf_QR21JycS3!lP(L8n>S9_M zcnlbF{|DwY`LbEb!CAu#sNOa1b_B*Tey3 zA|OSY;=pq7xp?sdJMCDmj780SHc5IN$q{KI)8iXnYH=?Ev%pK#a#(i7s7y2J?? z{s`*Qk&wLVMW6ooc9hd|IwG&zk@Lu@mj*Y}K`6IjEl>XnXYLwHFIUW=8u3U6A10l3 z$i$HWZFT4P@lpEF_8?KF-egYPO>SJyZEiDomBQ8Z=9VfC^J)&!Q~)Szfp0wMZE$od zAaYKt-`?ejyy>%Api+%F-UFZhs%5Cs3%a_f9X+R*#H76zo?g%i%}AS3+!`I*eHotMl?gEcUiNdI>8|l(YVJE4j=q(WA(fnqZ%Xl|SPy#vWzo zqaYbuXsg=jKG&rE)BP)6Z0#2*E&6jc2B+qkC z?gw7)mN+YpM1#GwuDSR25u}<$z)II}R<*e%0W2!by-=DK)U5{xSFIzdSC29pl-V@C z$Ni)F7=~A+(`K(W0YryVIE>pVvx2q_nIf`TWCFXo7x3}Ne)jcckaO%9_L+3{;;E++ zS7M#kUVW-_GANG^Rvo-mgBO$Y_PcJ`h_5PrLN`xrl2&nAn&NR+X*$rLMr3Kf6f1)p zX$|BHk-T=hFn=S+DqpQ9Ji&Kiy0_Q5xJ zRSJ@dZJ8+BnS4l&<*D13VOF7+kdJ0ZbPl(hsA_e!MOj%VjEw~L z946qPsBrx7$}nY~JwE702j=Fof2>^Ka3WZd-h(^ER#L_DAwo z*)|u&6(Wz2vrNK5?KJ-vhqal*=3fekk+1wG2>{T1z}Y7y0LJS{NJS-#2b6LP(Qb*) zz4Ez_18%zmloH$jTQLod11?FTBvTomdf`KW0ParTgU`>!JemORRzDna1cMrNzD>|% zpUn>(QT1jgSkRY9hV}r_>PyM}CV3#eDHdDyaN7dX{tajvDMP7^yM4BlO4F1YQP#y| z`e3^$TH57=c8W0vyR;L|?7o(Hgi(k^nMnv8QTaIQAl?)MM|ZF|GgGJ>976sW#dL}% z*a=V2#k^(NogOjgT-Jl&d)lpRW8z#b_`Gc+dI2aUSgb_8a2^Uk2US^}Uh(Eo(19Rx z=BZs_`y0ZAfz_}&GmO|?SmJ5Z9VyAgaM;1o8 zmw8G@8rPz&B;eh=vm?*70`kP*@kdQs?*wOfpIDvDSKR=e0M_ZUOj`zB@-p2Ygc7Yl zZbYS5hvUL4t*V0T5nHZkPQ2Xq0z`Oy-M_-11lfbm*6|Y>?h&uA0q!`Oy z+J+8Mto_k5u;)=MQzDOBI1%b?92YJ{Y{IXGVjkTEA#lse*At`c2g+>AUIRU-rx+#z(s?F77Uyv;e%n|}fYJ?))FtiKCr%GtZrmBdrtBbWKnE4Lz;$v|yxN1w z?bDa0{GFf#bY>ilOt_;x*9rSa+JjylDkMpALi=WmNmYP1)@NCmG$EMn^Ob^w`)eR= z2lMhsLMb8g^;Hu~msHyG-&67Yh9i&Tbmbd$^;Il0_l#@7e&Gi7n+f{%m#dG@_ezVp zYR2<$L7MtVujLy>*!`gi^_W|C{6iI)AfIzyQ^p;m`f%D-iQZ6*mE-$SesAT`c|LObWn1j z#9$k!220m^On<{7|Z-CYXt#XmQPL?;WauK#owL5%$NhkDKxx`Se^QlPU%q>}u zP;23xd;`K?d%J7q%vW)X{99Kv>&N1tQ#KHIL5VxMnt5>Qt_|%96ucq&)?nE!_V6`r zX8)*P_?(W=U-ev`Dy6eETAYYZxT=`M)khtf$#K*Zz#SQ?Z9D1o@;}^ zk>8lH29W^_D6LyW_jErGrQQ}_C``Ta^jw)4b&bIxRxnMN)_xrCRB*q@Yx5hnI66u& z)v_L=Tq}U}>xv1gikzx&>MR2EZUG-S`-_#?LcT#BXKb{}y+h28-1u`L7wmF5x2amw zTS?2hv69GQ&mfnrdqvDu&yGw-4zwl=Ud_E-gmDHL6rG>B9067fV)oUi#yao3oljhy zPY|6?kgk_;7i(D;Yk6B~R-KJCo9u;FdVPE=&DTt|ap%ibR!)cVRq0)gfv6vzt|w=Z zOceV?DYx|lk8_ni50P=%hOzx{xHZPpV-?H+p0L1=KdBeFIb=RVX8he=;oK21D~!}H z1(xU9FMj*F{*Hoh)%VAbZ)-Kpu^R$jc~#w_3ETrpwK&d!I|J{oM0YghIq2XBvr32$ zdffnaKC0pIZC7_kgNqZ>(&zG?wm$UrNN?jxZS2l-)>bH}(@W!(B!vC*szrdul#uE_;2%qeq zx_z1du-jMuzm;_59WCq}Eu8;bU%gt{!fxRglFvFvJ+3rW!7TY9EqJ11`nx3+JZGdr zco9c+I8tOwA6U@2a%|8b|E}3Dq~`*dm%%u}N%{gykzQoK^j14Fo_kZ*%e-DbUvPWm zr~!FgNd>K0TM<>%4i^D9#nP0gupIo8$~r(+pii!cNvI zgLRu%o(l+KBTdgHPL#LfM{!N-jqT*39XGXOh~+gNif zv!5|znjU+sLT9#L-^R?^Yuf_O|ZAk=iC=HJezTCp6@Z3QkmqcTc??ARG zSKKasBW73;z6uW~H4xUL;EUKx_PF5SO#ePP_X;SFzU33BplA|5zz@|Upzew_Sx zd?w5Sq92&tHPRj}#FR|c%!A^j-7Q2S;f&r>ntRsx`vA*HtC9KUv@x6^`#rVhNI^g!a+$Rs^4?Mfn*5QkR7INTlpd! zQs!z<7fadWcUpNP#{D0Ylk^qrs@4v8HMN0X5gU10wn-al-TAt31LarXJP0IK6Ezo1 ztG!hT$2Af#ls9`ILYBtPu|zs>=f>9+?g3U!s+gOjM^Stlo-_pmpPU39f_Au_RKLtZ zh$UGMsEPvCx#1^B|=F$jh3tMHlV9-Dn~Pq(VXh{Y~i{Bt>%4v<0+As=wVpoPoDt+o$hBEZyAAi^v70zVIw2sBwL0Zz&cgjx6yZ4Ha zV!<^+`j8%~x{X)&Shag0sB>LA^^zIZMn_Mp#hMqK!)0hpbUlIw`3Ccq&;{jvR5p>s zuBQIox+<*BN-oKGragYrov?27b?5u)l!EDcPc6XhsJ24?l(h&g@K%mJ)M@QtlB(At zvpM=X;IOIwCoSu%P^0>+MW*PX$V*fnvI z^bWq*Sbat6)>x0El_mOsDKVoZS;Do&gk7S7E-vZ9a)Kc7mAB|#@EZFoU{-72PYglh z4FGI>!cDKA?w&ne0&)w_6#y87u-&KF>onI7`7^>rfW$vY!b9#GSmrMJLG$w_kRwE3 zTo3{O*BLea9w#5lYSFW^W8C8>`f0PmU|}A0|@?TO&IgdutPC6F~##ze_~_ zJvXmbT~|U?!}`u4H727CEYPmTp)>yxtj<7(B?4SB578V9_;W7d_=6^Ev#nFWTc z=J7N&4{AG{{<{t3)q2>JE_=n$L+Fvc(yWfdq|){@hEj?#=a)hQ>@89uMn3N>B32_z zG_U~_cIuLBdkl|hQb|^$<93fM?ojXN2%=i^Hn_BJ)X;X#a+nZ%XpwkK7`UWcA25=+ z)`No-qHaWPxJ!+=W3^)s4Ur1T2WS-uP!A~XLgQM66U|4#@>O2XiS@%rss-bd2t+kl zV@E48HZi_p>Pp*!IxiXB zar75`mhip>IKAu2cb! ztvTjKEF<6bAf~hTYQ#NP56DXVLV}n;&}@A)I=%=N>j-z2&d1|PN^l$2G9E*hK8uxiBomH7jrNd- z?OdQWopY+4(sEJ{a{iPbYn#!M}&Rq<775Ys>N z=gBezrD{ea)!tP4s-vOe+q|mLu9nMdrCo(Fgj-!j`r5j6g^Io=Z77SWlKy!ae`_pf zw={!|M{yhG@L)uj5gO zKcg&QsXviEunQ<8-=KIA6T$4^h#FP}qMj+cPgU>>hm+&>Id<3IQ=0^x39w(G3rb!w z@5HSO$^5yCwD@;^$IMk9+*6Pi|Lx;YF31?~;Hb?MN_fOKh&u8}lgg3@2cSXJlm~b?H{HK@1h5xuVn~iT)vG|iS{2044gjM@Q`G$?4nR}$GJ}M;W z3pjq(3EU1lo+XG|WTN^< zBYZJ59nu96m$S7{qr|qf2+tB=v29m89T^TT632|!FB3qqEG*}hr#5a@9kDDcmW@J4 z+Vr-P;`KlYi(nUIxjfcq+u4LJNrr~E|M|anJZ&0KZuP-|fKK54DWEI;hXGyD#K_Lk zSis20#m2?jz}e1`RKVW;FFq<{U~O$^U}W{*0lq}OQx=p7DI0!QIyOlD798zY0Ip^v zC5j>p8W_swa4Xnxv`>SNHy$|QZ!sb~QUDqn8u$CGr73Hk-Zddm4U+7HeWb&eGWED7ecI4xEijnQHW8$PPo++Zx-epKEGR4 zOyi!@ybs)^KB?t-qwoy0*!*RfMpeZcGVH2zfuG+tF zxv2#=4sTaEj6Cup4<+8&LoaJMlF7a%b+}} zXOu6fs}Y1amq3EzJin(zK_1vp7|Xr$XAh<&s}oLvUkN#|3@MP;I=pV*zt7)YG&=pe z0X9qM9)Kyw;*EW}1mU&t-e)R?i9O%A%RIKEcMoz~_3A1y3f^-7+uS~T_(hzSi_=Q6 za2qLRiO`MI$4o@}8@gac@j#`u+7*Ia!)e1s1TBS}#(7jrEcJ<>r>MI#X-(9m_q-Eu z-n@U_F~IvFE(Mi#rib?hxjx3}S;cCTSKm zboH%||Ds)dSA(2}f&c*>Lj99FNdN!4gMqc8iGz!Yle40UlZ&Q@XL{S(Hd)1%&&`RCH!AiZx3TqV>it5mkv zn%|N-I@Ye7Py`Ri5vK;)uRbrkd%K@AK3->Pdx6_R#fLW0u&zqt`;=ie(`Dz+oR|&< z8A(Dlh?vXvd_ThcXnIKr^mR`ThL!>&!>9>L?C}<$y@`$(lt}CUUb#Shk(|^kn~k(n z_O9IP1nZI8g_91bBSoS`2S?8)x=Jr-9-mF}GUQ{6p=`n*xYMS&^SKHgPRDHDZF`=a zg09CUo$=Ye$L6BBi#@Hux+gWld>wR(N)udnlAt|JX|s!j7wV8@C46h?6a)d_Z`3cl z2L$k%ns-@ry1Ga08oSooUz0$XOwz=+jySeVm=*1zJY!Chg~8g-Fz1Ms+C}+1%0sJN z`ioC{d_@|hN?WDiS{>bGTByg$7=Vk8J;Njn`3$%UU3HeCV!`&DLX?tu|IG2|A-MgK zeJpSgd~jv|B>sW7^U+|z4X3j@z>yRPK123wq){J{H6zV!+!mj+wfzKg%1^ph48Rdi z9RiKaL>4Tao=*;+jgur|STqwyKk5#LtFvgpYwuTG@uFp7Jr-Kf%wm#Cv;@$HI<0OE zLVAQ4)q_W=n_#6EM*=qLzu{Is>e8gyaeF<^XBO;n@xtRY$_iibna zXfDT=y`&GB8+C=r)-3C$&fcAoYMFt>cFJH*o~wfp6GE<0_fTFN`f+caf;BcO`2#AE z%0MUBDZ-qeX9!MhYu`zxQug?Rr?u@fIlH0N?)fc$V1+T32_CrIocynHqmlV$gt_f0 zbnA)um~6zEtmb-!35Sg`9uni$V7(~3bI>cO5*f_z@FC2d6; z3PHPJSG?N|%GFa{%M#g41hsNJrY4hTn8d-~eDqzldEgQe=mg^!@pM09XdeE!EvShJ zXe#qmi;5u5W@8L7JTD@!Mlpaap~a+GuuI^;v$mdS=|_!|KV{0|%u;&c4~wJ@To)+th%%rZ+%S)Nw>T3Ty$n z?1WA6PefU}X}(5-=ryTNFC?HY$PtnB>4)kcru@W~UklWZDy*WJ>sUf)g>6>z>$4BA znG@!#@J=a5RxXS(E{rQQjM79sd(KC&Y8`Lm96!smm38y|V5_6FIC|P5oZp18ZG3c0 zvT2KWeIkF7X6IK#FJzs#SJDt;+aZ1Hh@$zuqwo%lV@xjsac$3?<^wq1pPC=2!Z^n@ zq&=&XdViN493y?cVhzJ@^h4S1)5manG9Q&65a`35r^hSkkj!M+hp~D_L_;R86U{3M zv$DPU2)0wvy}m@>7zR_IlzqhDUNAJp0(^XF4D6b$Olc~l|LsD&-54t3Bu;LekPn07&UwPs#8m*{sS z^7n86J^13Azv;}XLT6S7EJLonSgPg2zC&;km5~3N_(s#5y$AKT*h_%d&xfYwrv|sn>gKR+EiZM=_pfi+pIIhF z`7=s)jQ51w-@eb!en~uc+wTNGb%Gg${W#iXdoo1IJ5vH+4&9Nsf=~w(cF1wKDqU>B zS@w5O1B8;*Kqr)8yJG{wul8dZpypUNLwLpVRcB?$X?g*`#x!~HKknf^6Pd_bKE=-}%x_1E~vbi{=3)(g^Zuh!-NMTL~88BNFf;sE3Hlw`K z45D#G_B9{1Z#$gHq#AD#zdFU{WwIU=d+0;v&8<_S;-)LubZ4j#*J)pt&RTVWv5j_h zb?y0$eP`adpkZX!;vy=U^e(GO;gXf&#JOeI<~l8br9*CJG2mdvr$wr9uWC7ON&#;` z!eV1RT>=4Drbbu?SK%hu+Hw|4b+lE;&uu+lcs`!5Rhlr}aT{$!;RHQEm3RwcSFsKY zqFKDm1c5(*zm-oRdeJ9|9n8OW54br$DdWN8WW~!-M>`zw*g;XBn98cWL<3T5*&=th%hAnT zf&NbwI+@m?5-S!`ZI?iV#i^!uZ=N^wV0@u?59RxD`A0XHj`&kocRrJ`UBMKE@anaB zKwqSUu}_?>XU9DG9D+p~<7fJ&FSmwL+e4YkJ*G_4cwyDf{Xf#_sVC9Dk0T`dq8rSY4&r2Ms5s6R zoGtqsLdbi{e*sz_7Jn(~DIYwGlttj3nbX6>!?)OAcW~gJC7>G=Q8^VgHPE4ov0C@H zrb8(q_e!{hWhfZ#Tf&P>j*3Jwp8r#JaQb#V{riVY38gM{}R%wzq) zmaBY;3hjllZGP}vp5pQh4aIIrx~h`=sK%I?RJ?uG{16gjAYoC?<`{IJz}wn zXyGn63q@AUvTQWq*2Wao^|~k)tu8SqL>|cq4{Fp_JU(q&7P2zZX`zQY4#qSmHrm8c z>X%llwK(@b1TezP&74kk#?LaxO!VRdS`||T9-Bf7iZRo9Mrpe1oA{}&!U_vXDl#vq zp}1nwG2aiCJ%%aA!oZ5i4zW^_7|j)ys{7#*QG3lTrS|<>W#+L)Z)u1%OC{RN;Yd1a z=8;um^C`ORVP|AnOf;)pAlM{2h)OgokeL)j|DMsKY7EAo(6iqD zym-j9{Azk?ru;TPbvzfG6%?^bcXe-=kATBj-kfS^d0Dt)+q4Q9<{9l=#KY5JKymez zB*bU*48!-D8BRnf=kg0e^K4laORGY`9Fot6VM`;=2X9!#pA9otp7;Q^;+QF3C96zcwFscgXTc zo$+gV9o_u7+2DC1lxa#J^`&siayd>T7Df(M5Ah4grEqG$T$VLx=W@yce0n#VSKnZ3 zm{W^GVuU{S8t2MJ5Hc?(8{al31q#Q*?;v(a%~?3)D6ZTEzgOZ1$V0463rneauo_}EKB zN@r7Ga+TcJD&j_?gi!bs?C9-=@dyfn4%NK;cgr8($#wF{vm|YtVyfv9>@^3TlsLst zrBl8>He&deD*b7bHmvm$(uukt(W>9F5k=XO3G@M15zb8P)GxWm4mo-OTBn+K`1?f; zRlhq$_uL9H@y<>F^i**?nme2``=<_oB6%|df8oFd7+WX@LGZZb%yqng9<{8ebL`qKjZt!}gf6l>RUC_C7WT*F;(=bQcK*y{B3o*lyT z4MZk7Bo|uP`(`#13%ZBtJDI_dSq3#-#OJI+0aS!Dqn~z|F~&%7RwsG~d00mhP$xJ% z^%MxR4qIQJLm^$Uq-*xa9~L_{iZwsLZ6JLiJ=+5B{w1lT}$(Ujit)Qpr~2kx2OcEOP|e%bxmoT$1YK z+;HdVEpOEiwYq+tvG`tqc*0X4@nu~?LS)mvBKCp7JU8B}hcA6n!w}47kf0q-??HJ=ZHcvnE}UUJp%gB+vyuY7bWfrncnINmjsz>3V7p5mF?9kUAWx--@ay+}n4=BfVOe9>Qo}T?66HRni4= z%F|3i7ves?8NE>8#-IK+SW7%!<)hcLPX|poH1cd4viJJObXTYTM0_zm*^`M#Aw6w) z$1H4g4s(W&llO7mP|;L~^@?E@92=q4>Uw?3Jncx(APlw3xV8y`U4WctqHiSYvmrmi z2jaixgC7pHA%w6%Ktb65RF40rD7e(W4)FaSHTnPELn%>x|BI)gePIO9I*3G2Qn!dU z!31Dw5&DSJ5g`dn7|H+` zWf3XDN)>P2Jvow6caBTdsT0ayL?M;R#BC>vndj;&Ce01qsd)+F;&MyvBX*^oDKjHv zWklQkil**TgCAur$+T#MQLJO4|&R7jkxO=CqGMC;8@kXOhO?OnN+0H>KbbCH&sOLPOtvpV;6`x0iL3zoVIENTyD z_vdCXWL7O}^QIM^^lU6f6)h^ad+BH|k-9BS4Hg4cKfx#oCYZ8hn5XD*v)(;=#K<0& zrW>`5XTX>USsba&bQhM4D>$k%v485wdt_m0sHW?e4!f-UF`uy<+|L&a4=g=vLC;{1 z(Wa`*M3!k)Q8ELkaSY_ncD|edV>f{f6-l@1@F1{~VY5na=Qs}Eb0$0%li5ib~S=4RY9XsjRwr$(CZKLC)gN|+6wr%T+ zoi9#0woh*T54TR8s#A5U_QP8HVZW?hYtA|5m}8VWEr!mb`ou8!JS+DnK1VPpNMU-+ zspre5J9PjZN9weQECCd#v;+t<%rutMD29rFpn-T;Za{f^Lr6~JBNb<)3k(F4AfB1Q z{9uMteCX{reO>N#4;A_6eW#7ajp{xgo$I3RZ5OKOSyj) zo(W9q(ZBYY-g!e<98NN8!Y}1ZmJCCweZun95D8{nb>Lmof@)|GyRXe|{>D@xOl6lP z1_fK-+-b9G^7kO~$NU6`1MvG)@8bB-QWPbB!@<9@R3C*Nv_ zM5QaiX{_3*jg)|5achEKowNhVhhp-!{OcZdchLQ4RlUTP@7$KjCI7+Y;3Ymrr?4gor}#Og)mL7;Vt}wEv~t-KI<|0rrlsakh8XL% zunHyWHTVHp)8_Z+U-M6~v2#g#_$rKBh=dK0pF|F%?R<4oW0_KyP`1Br)e~C5x&L;3 zC@76PX+Qn)C-lP!2cQG%gW5L8&aO(mASq{wil|noqKptIoC3QzcwQ37enN%c3H27o ziB43XA-_mAJt;rRc!b@e+f-_946V~IBh=d$x^b1$k2RT>k&T2`K@-~}>o{T~?!)~C zRO1YA#fJfd9Z}*byDhe^gEU3_2}kS)diO_&@%6=@BJXEa+EvsJpJ@)Cog$=<4o!J) zmOX)TDEciB+ieuv5DHyb1CuL#nb$)bC*kh#*GJa7a$Z2Y#~}dpY*~Q&I*P-$!lRUj zI(!#Pj>iVy4La1-ZG{K?`%`A*6SeP;=q8EhQggS@QuR}yIld>4UQJCYVhSH%U-+Hci+7|h$Wwr=y zsUy&6fg><RL zg^Y2qAUbA}l0!llffp%r==nZwl`ZP7ZLGj>;oh5}>Ya+}qW-fc(vJ)6fN-!tB^mcIlJ`~((;LGdd* z=Sc985xs|Ehe_~n$~>mX@K=UW@Fg*HJnpME^OtB^!Y|-VAwk#16Ss>aDfk>C*mg=? zZ<^?Td*`Y1?gwDs&>B2?47mV3_1=eI?}qfr&-v-Q`>y;ZQZd|aSoFFMkQu!5q~15_ z{D|~#!VDrb+ShD4o|9#|E(6?v$D7aawH_*6hb0TOShG8ALk?KIt!_6wh*@;#%yQc| z5j&CY-9SWOtdD2x-g`KMzd6*E%PE8IYo&${A;0O60B|%G>ul%w=E~=V!2Ss_XOiOm zF_(9<6#pju8AISRbI0%Umq8fA%MFd*`zYC?w;@WtRIP}DPB)`68GQZwY;^tV-W(mRUu5%5$XWgd{)^0%Wc)+GZ96e;`o)%XygCD*HC3GBa z$>iX(Q5!wtQy;7|SRqpa12{gHG`e$n7(?NU^3;BmQ5xB%RTcfH=Pn!hh7E0>z9*Q$ z$ld+tP%-r8sbo*mtr>BlE9x%;dEh8>Dy=(!P~y(4K|(%$)G?^sCtci`sMN(uoW3Z$ zvzu9AQx=0O^7xA)mREgd*^CU4nF3?MOpX2oIHKzq-YIo`AbjbGYw-QIGbK7e8>A#q zkD2*s&0NGhO<0#4!65!irO`4)+orfa6eZt~qW5GL$Qq~yo$6JCs|z`|Zbv2cDT@(Q zSTf6o?5-kYIkZNMZ_lX|!EYC@5gW@PD2Jbc9SYjZh>qM3@PO+tg9{Cs$AS;gq?L@l zB#SRmlrw9i7p}$t2W`f&ScJ4$riU5H!1=cJ6CBG}UPOgknSo+ut%6ysD&}vG3}lP9 ztX6Yq79G>V3>y)-Q4G$P7;wv9g31XQv!)&m!YLEl>ymVJlggt~R3V_%!YR|ip)3z) zWfvbHo4!#LsWQz0wBQOUD_~2yg|jWnX%5zEKo;Ipcb5<$!!8r=!eBSof zh?7(n_G9L2usX;Y>In)J{~BPMp0{MgWq=+ciO$bRusTzh0@d1e2C>G*BW%+E2eLgx zij;y|B}s!Z5Umf@TKCBc?oi8>O_dX}X$qZx-t0Y1#*{gv1ZO)1rYo8^b6t%eY zjV2J0S_i@ByY-)pkmZjU7IDoy1Z5(FWw+2HSwmI9umuCh;a?#K1JvOAt(pT$INg4q zD2NbQy3G?B`K!X{;s}ezXiBNDDsSkbM5P3Wq0c-1(PZpyuc61(!whFdn$gY*5ytdG zYGD#yT*tA5p@S9ooC#hJy9~`<-j3PZ9h7iQlCjlZ;*bS zRh_^vC{Ru%Y#>FUsvMnX7A?xMZO*&{#!8236H0axddERT2X*=iJSa9q@G>VyNY>j~hKSJ?S9gSvqKGu5#Le2-Y@^21 z8<17&DJP$+qeX(hY1AtpJ{PIquF%HduhXzTJClojn`w{C+wc*^TryE7G1XKX70*0^ z#73j*aLkRGr4CI9qxg6N|ME}GG8YS~6k+nxN;W)6x|H&BEMSx*L672L4yxls>)IYO zDCKPEN`Q1)X&Oz2?b-hc<)y;&iFJTsvz+i$=f<|-$x)bNj$gH8MuK%ce4{wM9zD}l zJ@z~czGDJ5FVhl=4MeSMIlsL|#Z0AmnN06j$qYJl=|Bs?LKQ-}zg0q&FD-YBIze}s zg+W*OH<`te0?9V-4OXWXhIxrykEs!WZ`;?VWAS4Z$6=@1#Aap^+Q zYGdtaN^3p{3m2HC2XKgS4LU%y<|Yj^9jHcix_L!XO2r4oQ+^cNfy7Ub4uF?Y+toqS zoNfUtRnbLNX>TgyOSXgcT-4;9lYGh1#o3fxqA8bJ?+^q%ud=TXWo^nUrEP*RljtU8 z?j}-hOxZLtR3pVUK*}M|ttE{V9f6UcbZsRi$Bjsm-H|+vuApBTrt5%9gq<7a>+ldx z{iVm77kSvhD?19$ol`Rjp@%$?69LcGPmZ>Go=}o#HNS`j#aAxcP|5e%OIb(-&3Nn` zKOswF8d*SlCxXl}V3ZrXw-KT({VW%w=w=37(R9~E&FRw`v?dlCN)PsbF$cj#2ahSsNq548m0a*#aP7&$x^+iw5;GLX(8@jpD*c9W%;Uq#oQ8(AN`Nz4m%{HA1#;1NRkUrj z>=*k_@KD~Iw9(EIAMF`>>(|LkW&hG3y1f;YaMzR+ z)Pa5VNy=sRGL0Le{{DZCslJDQcOD?nhu;@@q?4p8>n?j@It2&S*qSG85NgR3e&v)N zD9ObSd#epldn7plJ%>2gNE^+YYDJcm_0+vVyH+)N5{_2ewW&f>=gmbKn z?7d*$caN&2Upar)(0df}xcH(9;4f2t{4-SrW~C&fx6hZhl^^;SZ`QyOWWQ=?T^flm z&D4(oXH(plu!U83(!1&34@#f>HW$q*{)J7&&NN2V&em{V8e}=`fC`=@s3H!fI)(Pn ziR-G6xwBUf;&;N&a_GpEbuQx} zxs(JISDmhUNkq_t+OpHH2GxAcg%PDcxW{Amdv5w@D+4fM-Ar};4X0MN;A{NLxJMf&NSRvKMEa zjEbsg+I&#D`+YNBsdcu8B&-h6Z24BMkEGE8Vz%rQe*?3?=>;i*wSA}TZ7(AlFlD%} zW_0%ztq9X^2FBc!JFzEWN>@LE+&Y}33QRaPs2mk04} za=zUn22)JE$6E%j=kY{QqW+8ZUEw4&{r1-$#>{@4DV5eD?$Q0++Lq!t^&VCj(*P*q zqH=0!JSFw2eB3TvL8Vs=HuLkdrn2Q+q#8Z{?i}vrqJSJ87}+B$7`Da|M2Pzl@VXF5 zyhweh1{i9C_`{NTAUw26333~Yz&JL0T_2v|P||wFf3z$NiHW8+8~tM2;W-}Fp@>wJ zS|mJ6Yt67qZGR7?V=;j;APpPPIkRQLT=S-3 zG7g3>hpKV>*4N0nfLjec19Oug<%eM%Ys8Gji9#Tb>AO4TB3@**A9#IhNr_KtV72>; zbGuKO)Y+^B;H6L6wcdBCX_y!O@r#@wf%fFqRV0UKmeuhG0;?lZf;Z06e&Hf3oo7mb z$ehEjVh`NlARKN?C=O?!3<=hxl4^p*qzfGFKz|6YMvjFcQ7>lnaJOi0q$kTYWma$; zAm-+uU{#JV3g~3rW*?KL@vbKBN^y9>m1&mou44T30Gw)x$>iyIXwOj)EZ3h&~|$=?*&|a`-54UJymf*0+c~C7GUK0===()w7<6AwCuRmf4f5SOR?) z=s}8aNvUskag;SSrqqFCZEJrIiA`eqj5RLLsfZKF=@${@0r465@W6^WOL>MU0sKVz zhyBiE4^(q82AL6!!t%ABWw|m36(> z93@3r<#-r$^9iAB{I@?Df}X5BS!2A?%`=*)HhDz}>gsyd|1~}0A2sZ8Xd1V)&<_o} zd&u_-?!DH3YnHv-+XTklRVgbtw-BC%^bXA5Wji{k!{7#dyOh0nnwUN0q;1auoh0cvBcCFpW%rUiC)+S9jLd z@Ral=au}pC2-@jiih>`|gzu&zo|jT2Tt`Rnz9e2lX@l-1P|YTg?YmB|rlqM4*(7g0 zcMc_T2O@yhiX%_!nKC;;=p6c8;FXfaWNL^O{$d_j0ahn<`k#BG5trl)n~HMBPv3hd ztdiv}90Ec%>8$>hhkDfw#LbRbz_&vZFfqH{%VD5~ll5h_uw zGPUAd-drp)R(S)fMVTkoWuwDKWM`*ZPK-AzM6W20fRd0Fimd+mRbgpLSMTrZ8O%a3?{cJfryLC z+SW+Fp{09Zj*{KX31#fI2l70>+mKIgQ%MKD~#%VI40$9YH)#k zbqO_7NfZnFh`CW$5FKTqWv!6kNUDFl2tzAQHOx?8xSM9>crW}5m&yyQ`E=@3O|53& z_>WbbcE5*y~<03eI_`9|4@F*>c`cdHjKyFVPj$^OwR|CFL7(?hmz6Q)NjqPj&PUC%$QhOZF1-V z;HSk@hBVk(^F7PtWlcm{axeDZuheroVZRI!dJfE;)xne@M?TUr1vq*~Yxf^Z zFN~A^G!eQWG*hR=+OLbzCZEjAhc|M5YtHXrkJ@bhokm2yHyFaM%dmb{^p-_@itD<>n`#Od49&neHjY8820CT!Q(ttJ?9drWZ@lF(Z;RFUOnb%Uc2XuhBZ5qi+FnVmSV<#j@xP{TgAYK4eV z@9*E3`P&M5$S6dTx>Aby!&_GX+`i5=Xk~c#3V9_VAVqs7qcLhS|8{P$1J*}mqnIw= zuuTvK#_;_x#8)-hmNon+ie8zEA=$Qax2m1{1}R*6Ys-hXiHu0QS71Ah?GA z9@}pi$lPX?l4+joWsDjAJ!Jjei5z)wW_E*~=RFXg>73hF} zD(7nGX72Y-bXZk#aw>aoZ7H_n5K@`hcWUa%W?9eD3nBhjxf$Bpgl^wRf%jW;{!Iw0At-u(qJ-1aP2O z1FG0p!yA&jQ4*32da5+*gIC?-#U2dYd<#=Mnpw(m)+!Hw2;!cODnZ%RrF0n80yxE}6G|i_ zG!?bRYc~)Zc{*8#b^=k^t<9_x52V+<=^YW|U4ab4dXNa7RgJIWCT00VsD_6<0aL2KoRl`%-4@wdw1YgoLX)K{ZwsyXR6BK-^x`hb1WITVc;zL3V z2X3FF)Mk(8vZ82uMUF+uM<_tgLF-?r%jXBqN@Su1~)}iWk!HR(`BmE-kO`yA?IwMG~$_2^2O{3U((U zrj2t>Ww2SJ4=C}a5-#-)C^IA{js!ZrDH*X;TI9|XC<wx{IrN>E z?QPBSzC7D{3A^f@1%Wi1#{+~4s|@O;DT0q~Ay4Un0OoTS*Vc#lN!pb9wQkOW-*F7a znp_vZG;@#YUNw2-hZJkMMUpvH1Enq#p#VAR!Xs#NP&>jLEgr?+fKY-bq6 zDZw_WqPT`#gY7v|EctofS)F{a)l=|tL5Oe<7Jj3k@^LFhWTT}sv5EF#*vs)Ou0sVF z5`EN({;1(*ecX=OD@t^BF^JNyflO%p>ETQI=M>pUzp+KFnpm=7$P`UyA459J!{611;Gq0UMF@%zph}-qS(1Pe ztA8JWq$dkd%uJ)NiK9jRcV`U_iv8|0)L52md6}AbHZjJL%!3&%h~>Pav>H0rru`&)wo#1iWg?r;V$?Vs{Q%`1jr<~aQ<8n^9vNZodU)3Ek(Cxq#jFf6x(W0v3lq74J%hlAIHzC$^h$zalbT}Pp z4$#mY{__9jx1)K6xdXHa`{l>(-qW$_ZRGE$Gpgl(sbeZyn%n;kSoBAV=JcR}%P+`{ z5NRE#69#mmA<(c|jqR!Wa;n9y!jQmDM^!5-T6W0IvSU7^WgOMJR)Z$iSj-in&o`lq z_?MBV8&^RIdp|0=Cqpp{PQZvqvs~9rQFGq$I z&!GP1q*SnC90$lGS2*&wsagG`2aBby5A#q9|2w2eX6_I|jVBS9RKD6VW=!+1aE;}+ z2y7$-`diaGYii7NZoCJ;Vcd>4(kOOK48hH*mzf`&C#SA#ut6jHX!slYO|< z5UpOZT6Q4q=fHi2pdZ~w^8u|)UvCS11NHh=-ccx^sjSVE95B`6_kxwBw*T88H&^Qj zYkH6Z7@XfQa-K&>D+qX0%rCbKGGP}Ax2BZSv-w+|%_B$C;Juc8AOfbX!kJ2K_5A1h z1Ic-hMETpfm(fSo!ylw@H@8SLcR=+S&U~=fkbetfu-Aynr}&6nXS~nZ!hZ6`v;ebW zfeKSGp$S*RD7v8ExoS8sq3BT4LT15PH~JyZB<$4ascM)l7)M16bT8L%qq})10K&Fu ztk73h6EV*kQBHw|m?;gR4%A%I1HwGTOv%iiMwNE7!B%AlvS!psJ)K{16S^c_EQyIl z$LP0KOu7gw)wJDDj+8?<+G(=J!^tg(BAFD56nbs$06KK^*$h5)wyqRy3vmga#fT(d?1d{jdwH@2j`O`AqrH=A7%4RE)$ zk?(bbph*-kdi`>{RbAIWn~9IG@smQ)+7LGkX~&kH_VzHt^I~z#+&XJ)aTSEZF3=S? z(OM{#KEBB4p89b0+VW+euuF;c>Mp5GPqKCVrgN?1<`22O&yy3gvODV9i@&4%^i5#z zNu2h;7f`wAJ>W5)dz)Q+^RM)hQPB@3DYGYhrsT#97U_>2%tMk8fnIBL#sx*=L^n_D z&Xno#Wx@xCKbS5&7-t|P@Wb-F-WYe^kyF3^nI&K13lWVKm@2hwPA&*b6Tt8phXURNONV2C8I zc9?YgF!lX!W`DM343cCzKOySWDB&XC_&Qb0vxBq@a<= zu-()?s4moqYiH!#N<(ISIcpdA{&swz2WVC}2NhGd*x&jmF8L$=(ecexBwXtHKT>MO zzZO)jy2&_IzZYuZVq?Y9w8Hjk#sSx5$gnY~1Hp~Sh8BIMWurDX+{pREbz!I%5Cg?O z$@ii?R1%=H_G^j2jemK8E!;ke_>-Zz#hJOJVeSNs59xUINRDQ@b%~A25$ZXTe-s+y z$Q|go1?9K{vh2gVj9EVPB3sv;?Q`QF?Q#+1_XDVVCsSWA=wm zVez$L0_#klM3NBw#?B&VbxJZ$%6!<&2g1Z7-Wz zA=LqPHmU9fQ&fcGjbDQqosneK*JRAZHbwZ}i8qOyfD4L>sh->At6iN@YdOU=?Oj?*^oi)IlQ z|IUe`U7<3WDw#T2xpbBEcbKIvE??;O$W?BNj+p8A-nJVefy2o{(_&L9ZOfB@=CoF*HmD$7Fe*0>MdflXCG2u*qOxG;ByUPDN|55CBHDXEIaI2JOc|tp~s@w{W+j!d7>HGKkubk7)VpkFZVd!ddDeqgaGbM0tf5F0mF z5fv(7XQcz0Vlo_L8Wii+tRaMss{_(4fczJEAKmie$X(tD1*BtPc8jWP zPO=&YzHN!mUo29F0K9-LsgSX=4|ZrioX~NxPxZEfIMSO5J4dugAvdjc{7HbRBEL=( zd=0t2q7kGnNuR7rmQ-nHdQWCBtPf*MD#(dLLWd45)<_IqZy@VCA~YkGbHpYDkb^PM z^mmjXr#94I!~6z=M7%)xmSD}~w5GtUcT5@$x2hDi#4(vWK^0fi+tc5Yk}f_8Q`ODS zE!#8O498q81I_>Fq6^g9E;BA1KYq96hq*MWx7AxWH9V=TTQRMpAB(BBjVBzjqS+KH zRSgGAw?Z$aI_P@45WQiDF$c+@PcNWNyLM!9OWg$p;TL$)1pxMFh0kd@4Ym?RwJ_s| znDY>~-XdhLBWW?I8jP~W0+{1r(TEX`Uq{)Avi@Uj(*qUPo%-#HNc&KDDeI}9NL<4??mPvkK)38eke zK~tumM`6mwkD@RSrNXkZK|DjQ9->ph6k_0AQcta7WL*?T{iOvkf73$gop8N|iKozH zaD|?E?njTq`mIpqx5H)=s~6JnpyTrr&{CYj!9&1ZIk@I=5^OV;Tq3s``BcwgYc|6T zL;{fiR3E+>!T3R!NVZNd>%VS(KA@2*4>6kw=i7mYJJ*MI^yDpLpfjW)eoB9;C1+ z5&+dNS`UF9){KPuOOrwVuZtLJ4YJcJDSO`*(3L`G9nAin3adev@(+MAiZaj8ftYG> zmQrXY5Io7OTeR3#Q=xrjQdL>XRM}6>BGmV3Z}zl0S?wcG7?Y;b3*5h4^^M;rd0p#e z$!2k8qQXy%?E7{0wzk$1j;1`7kaNpDM2{5P)F??mk84Q_0drHiX~SK7?V#dqH9<>! z@q^>0`1)r`Oz(1>%Ki?L1RecX%I7xuab;W9Z*n;o!tRYikT7P%6wmr8!kVN=VNt;&oE!!HbwB%G-- z)R^a6#D&u;o5878*Y7y?LM4ghijr69v{*7U+$4lnrQU`Qu{oN66r0U*U(}Z zRgAuKBIyh?viwI%k1q&VV?9-p(r&MNo^hiDVhN|ZkRsQ5FcfmP*&@jxM|}^L)ZkNp zQ+M^u`0wgam)GLjO@)pUz|&=5n1>vZKjVcLY?ptHLR~4@n3hSqQNQjXGt^sFm_p{M zdTlAYQ`ZZ3s-DiOI;+$)MEc_eEN+SP0}Ut_AA}+7hY`z6Y5|4H*m#)=n98&<>rd}6Y*mMam|#Yrz9^HxbCp) zf%j#!2J4QaC8$yzt}7I>j~wB%=2zzb+u(p-9ukH+3I3oB!QrQ6Ay|vS)vJxvR%rtG z`HIbtFoYlDNcY>qlCu3;=2KT}5TuB{U5OiG;1>8@41(T0*U&G={=m}TxVlor{aA*Z z+fQ@=%B}3Q6pw}K;5numdVraQmxR+edyW0fYLeEL&Jh*uZ6Kc`%X+WW zMYTG?h73`VU{kyr0MF}dgtp*!PN1%1wixYk_TvcT>*h@cNuKTP&lwFUlLxi5M zch#OLe^sjJ;y#i@GTF0@GSuTTKSoMJW_7BR^2P#xWr`Xvq zS$eBJ#`K?P%qT|_w3^h7Mt`RQywYK9%6s0ra8Cuu@IWS^Wi3!$fKuQ^7s*{Z&apD7!Pu@2w zHH(O`m9QCe@iDssr!J~6NO+=kd)w^l5Z+T&aVzg!G&$pM zmFCF_SefXeroL?%sC~ZWh7=7sJ9Tjg;_$J*ND|#qcF(s`WbJ`o&|wrlRQE`9r+vJ+ z8#fns(^|%784M3-@GJz_ne(j#0z7fzjB|Zhcyfh1OSvHgzrTl_(c@~5&2Ki>jd~R4 z<{9~S%c~SEV~zK-_G09k3US#OK4p#Q^(z{M|BxJ=mUcd$`@qqTA#3<;l9cycH6*9J z2-s>~lAe11&JG^N50meAym)h%{jCZ+@wwgn+hV$l?izACx_Y_odGz8Mzw}RfcoE|k zYZdKW-~tQ>&A)Cl-xK@CwP`i~0#CrjZ1wdgRWYhtdb)anl{s_wC-Clh)7_6{#g$LG z=YzQov^7C@6Z~!QL(D^AYbSJe@x#R@>*`?5y~0A~SSLTt)DuS16V7z3oOBe>&tM@K z{>{JUfkmG%k@~Vo{G26P%Z7E*0=F1@ajen(fiWiLn63-LF<$IgsSDvgZoNvUF>rSa z=Ao1Wb~W*%i@|0WMGH1}a*5Im3UZ8%Q@CardF_wHq>57uFP=iY#cuhnEU!Y&_t7=p z&{OX)%nnN&ygVm$fjy1M++f@?zc+V*>?CUd4Gz?#-E;EC_Q@m4H5D3+INn7FDMUGc z*dql>w`+nNQ$~-AK*v^U(kBwPdtYM+C)ntOtx!%g@4_`G+Kw|{Q#Gio^DGch%)HKp zH}a!mi#ZA>FD$-7_WJ7D=}1N7c(}7=@4m-0tWm6btGqudP`CHRGQebScjSY)Lt`ZK z#st-m7>FpPoKbDc&(iHGuYYQc*##jdE0%u@8;~5U>6{XDzSSC)(4TDSOtj>D!GqVT zqb}sSFo8mvw$5{Mm2>NSB!Tw~p9SH*{X0&yHr4I< z{)qkOdLfsH`QPv;mng|2T~DU^~rC>6$FQt)ZDVnb*is^V};_uQ1ys|ZRRr*tF5frhQvE~)}5G3&|aRLD^ zNS~n^ogD-M0c(OZ8W{pRF?nts<-@g6XQ}qb-uP^KX1$=>X1ia6HN3i0~l z3o@2&l{C^TGXL*!E+^R28$_eP_g}Kfh<(H_gfBOtS&UZHHz{Tda@!Vl2^R8SvF=B% zT`1&u47Zd>$Q7nCJl)Mjd;}#bssevGQ{s$aFVWFlon|@8ORdRX6=_m{v~gGlA}#bj z2hY8M%9(2~qD?&oxzkCIP@J{0QH{>a8$#YuiOa-a^3MdvqO*-=R{YU)ei`4%NNJ7t zdaE#mOE4J$i8U_*{tGHxyuzSkI}Xet3!^&!xraXXQ2GO>5zIO1R+}ijm>cL=j3r~R z`N+3J1`eZFtg`U%xla_4gi9%zeOc9jwqj}ku42%-Up!OFV5 z!!i?P_OA3Kdv}NzW8^VhNYj|^r5NL~MsP)Aho9FKO`QOQKksG>2!h(ikbnHaMz@#v zcKG=0tK#vx^kO5SGOr z{d5ri-clE+qPqXYD(XRHSO*cgLHG(uiPl_P2G&Cl!MG0ytj8v)krA~dDtjI)YVzRG z(fOy=y^0{Ko8VQAtZP1i14gI=AaAdxRu`*Vs~3^RCmCA$UVxW`Y<=`9LEt*yP`fjIJ=a#I7gMHpm zNleW(7%U2uqV=?qScU47_pjxGjkfs1iRINnfte*%4@- z5VUrIGapk-40jT!h(sTNnvEZcPeS%CV~AUmCs}^%L3N}8d>h#N_R0xZl}N>DF6E_! z*>F65silj$AhatfEPQvRhpD85pZy!#aT4J8Fr`K~tGN3itkCU)T7;z+Ia+=5BeJq? zm4!Q-jvD(HNB)!~|Ixrf)LI8SDaA`?P5FM-i80<~WfLlB5_DBOeUcpw$`wb#ctC^oGUzE8wV^YNAm6I`>SNam0(91$W z=BmgXmq|rw*zmWKW=p)m+%qhew?iYu%a?G~83<62#bYb~l1eEdyHfV5;$u$cy$Jdg z#aS^Q14sk76Y2-;iy7=tOi2N^+9ih`n&3hMWKcGXTLorV5^L*DqLX5xlf#NtbOAT( z%9?p}L1OF9nk9IM6gD(@N;=R=7hsyT*-#di6oYH)R56eY!D8%okwyWW3AQHKN-toc z6UUsY{H3tT7-UMGxNXR)_zraYq)J%nQ*rTX@p-OC8q{+%Xef4jIaY7hgZu^qG}qZ= zogqyn?BhKY1T?LP>0yN(L1CAuNE#?ZuR(%Y2b8-^Erny0i!Bv|W`;Cg>p~TG2HKbl zO;DKHDhV*=nud*h@5w3_wT-adOB-`1xQXvXYv*BwRBib`(gl*8WwkQUYX1eMSB>B| zSN6cOaD#erxH*!<9PNfEa*NB#F*8m%Khb-%cwMtk{ewFzCsnjZ+rRO*XNs;v0kiH% z+Z&QfQIkzXWpRaY(R0osHAlvm&4|cJfQXfr%Fya2hezNgv;y<5HxJ@XS+Co7*N3~c@RI?Bzr#Vcj)L8(UGxOL;(Ka)#_x)n`9Bq6bV$i z=BRYc(d$vvU~sG!^9<{$OU)#q{kE#fvPeCmSRV%m*8E3PtkduhgD}^RAFc`i+sNks zRm4Et&DG7>>_3B>|6NzCSpCHvWd-dsht|r}vo5^u5ZnX@NZJ4g6&L_P36E)HYMQwo zql2>G%InnvS%hWA3KB{$-&!P-LVudTx`ojZ=aNT}qAK`_;19_d=w7%QtIHBXqr;D3!{`Ei(iF~dLxX= zE)A14cjn(M(4(sEsMjA&`I`u%A7+-}){!NU;re};()d}Kh3|uzr26(6S>Qb)uvUCN zw)SRb1_3fHY-!C)t>Uz79w!3844cvk9xkhj`rPz7<7iVVkzv3kI z#e1{#juJY3fU?(iT#1S_njMYCa&b1Zti*ar3PUlyrw-uuZv!nCfPO?O;3V+qWD<*o zLIX@xJWsB*_-IV4P;jM5IR5u2I6jrs#@y|QTzV&^K~}z&p@yA<{A6lzD~{_)ai1Zm zvwFT^dU=Bh65a^K1CvS(64q9O3(CU0b4H=vO5L4VsqJJmW-u7{PK z+c~oU^VB#!dgUzeYMrQsGH((F7Z5q<9zYZ6sVgbdJ<_A^7$1*0u3RsBKAJE7{Cxy{ zWQC;LZxh1kQvCY6aPQx%z!3) zB!jQL;P~0bL1M1*!`lO6WV$V1@fhgS$qXZyqE?K%5UQbiTLW81;ynFhpWFsOi`^P3 zt>=zANOumO=d`Z0T&kS8-ormB@EwYnOB1idMd>IIX)$zm>0{a!%LAe;0~MBLN42wm z<&UC+7e`no0V6a8V3@RCW>Fz8?w}L6L&YP$+skG!(2_xmL1IauOy?y_y$wr$;7>+F5+-Ldys z5$l}!W5$f{@0T-2jyE&kXFJ(yzFO%WD_-g;FAQ_M>>1XZ>RL#U^#rvvIaMSPUhrLJ zz&HXDXBF^6=^d|0=^aQ_iF>RM@?Cx)J4WTkREKwH*17;R>$91Ju*SiG74m$OFcaj} z0-o`SD`R{?IPWNbY=|bl#rhU7KUoUK0$0%83I60*_UO0fFzm=AnrS+flqh~NTzkn@ zs%MaK_BsQe%+zpKqe3kapSJ8P6#;0|aG|b~rC(55rh59DuZ*0+}XTpMm)pX^pE4QDVK4OgO{P6^#UK(a}NG zVPCp;sYuvc*wyyyb_zzOdG-bGy?>Zoa3wb=ENXD>xvz#_M!gR@G4Z3^#r;JJJ~>+Q zmiwJEeZ_GqckjSBC_S24D%)}w(#3l^HD6=KJ7yhelDL`OEsiBSb4r_rkn6_Y0vC&7 z2|*mZG@Wp+ElA(u0-I|jY6iPwBD)Pm;oS-YCso8H_p9YVqrlTyUqo8(gY(X|n+PND_zq#>Qq1W}*c* z55AFsb7!qXz*cJ+4GaY+9`b>`YGLUWn4gT!H!ien(x zUaeq<>D1!kXn5I(X!<(&Monryklf0nE!!T5o0ZTk412&6uvuww8#Y-Xcv&R~M=;Gh zs=}*Uxo+O|$;qb1?zpBH)2=NHa7vd5wXz)!vd;{flwSY7AZxs3;1BfeD@TRL?Vp}> z)RpqwFYJ)>P6nYk_GCTvDDbYx#d-9h$>nmEyy5=(?bbubJZhBn@bynXPc|YsiorMI zL+W1|F=+goPNDyUb-6ge-0?rnio}h?^Z`az#`gcqpJ71F+!0&#`=qbD5!4al$;>62^ zuDvX|u-lU942f1BO=!2f0gHO&2ejRgPI|-JY>uOE_NF)4%Wsk*Ug#j&99dp%Pk3d# z%ka9R+gzgG01&TYYjCd`_JB6KqVL+Xqj`VnWAhGU@)GYhhrlz1Ae+;mDZ?V-=ZmX4 z_x^fw(q?IAAW2n2i;1Sx)AWcuriNLmwaP;7_egsOXf*`-vUyZ^-h0EnOt;m7wdLDfv- zE2jU7&gHvhNLp0=*b~WMyueh54{gpOe%=VwvIT85B}`=$YapqDyJThw%~0lXpN~Kb zdSvODrHG7RZVn5^_l=D=IRXpNFIiB*xkXyMzCsw5K>|svHV*q1>1Uk$ruw*TnE=Te(ntTKKm{O2$)G@RB zj*Pke=;+T^a?h@qQ+i0VCT#?DZiP*;UPMOTf%COfe~ruG-OPO3eR=gtWH>p=WnQ5b7WNTXNp zSzHChmHDgm&=N?18YbVN9^cM{>3x$C2@*^OV0N1zk@huWo%_z zX!iD_O-4GLa|0I|(Xp6$bE39Iao0!#kh#{iftKO0D)vm7|w->Bnnnym$PBJM>h2 zXk7_7L1iZcv3P0RQ~QoX9kP6lz&x_t1CQMYH#Yy`Y(TEvlx;H`#%;74yLo%?WRIxo z9LwhCPA>h1VqkJ%UxK1x=lScj8`$M%w1=1q&+kiaZWYSHxp;v3 zpX9=@KKL^wL42`4isShT&1mxix+;FlYNwUn7e>BLNKX{Y&(3Qpw*Jsm95aWI)|AaZ zC#FfBW2Bwp9exzSiLxup9e1|EYua0~`U2JYa-t z?p_SiuefU*o)h?3qxXcdowIR_TwoMq7#|+9s6edbsu36sfe;30`jvzh zA@RXebFJRUpM!kWRp-a6c+NjL0tmW3*h8zn}rnde?0jo*5<$PCgLUlbH7mnr-q4bxRC8|j1fiz z#%8KFcxg0^^CAgM0_uxPA(ntga*{izXYRKm-TMvJ;i6Hbbd0z>M-TVF>)+(!^!LW~ ze1p$m`-3<~U9*oq3H)1{FIzG|k}u+s@!! zzTX7VoIC7ZZMaEX)$9R}M2P~x!PlJu?vRktz%e@cinD%l%|R(s%qaT6<)zrmG7EbO z@d=dSBNXW)5brYx_2ozV6(;=&i~DNwwJTMT2faU8Q@f7Ys&EOT%i$6fb2Le>V)kXS zd4&d$V@^c7+~#cc`DeK-ATT3(^G*4w{6^!+NdkkQ{D6Rf_yI24sP-La|L=$Y`o;%9tw(XJ&dL&b=+&Oqz> zH(NF+k{w{y94d{vWri_SrUgaWxj^rGrL;af>^I&ybisZ(JfZDoFDrzxMiS*37Nj@;dQVV_0EjdJ|xeZ&EvVkOzkzftkB$)8W?IcE>N)3#ofUI^F|&9hhl z{-U4C;lynp|G_nJ7fZ8Ai)vXxh-!`M z1zIs!b(o}Y19ctaaF)2v*u{=ZUrfk|iPo1PaKZ0j1Y{B_3kUptWHsqt5tA^*?CbWS z)wSpZE9;eMBnnRD@|P{Th0DcYI80{p4bII<;?D9byDXfG`FnmxytQR8Ed=3sCu2zL z9g#!V#?{de-U=T`n1w30Sl+_xe~loEWKp@uq#fIX-#BS^k@^m~qC?vO!k6y9!`hn>e0xv8)7>>{39Dv>~NzJ}eKAE`-Rvm2s?_o!{4F|yKrp}<`P z-jVZe2QxM&H86Bb@TLT9sN06)z=UsK^EGUuOJLda3EqZFl%sUcyTsit1;RUat{%yh zUg{nHaXn5;I~RS({n0NH6UQT?YtF%OALTo;So{FInwT2{N1tr%XN<0+PrN2jk?{dd zBu!pT|H=sRLJuNm)**Fjvp7@cO3Ywdm9!v*L;+gOYUsgFPV~f! zCR2<|N06$KUI!qc%ih~kiAFjaE=}B|nL_5myik7n9cw1W-_X3W5Y)sd$kH=*R`xIb#awHHsC$i?#w10~T!dhx{OyB(nK0 zZ~6`C%MGrlah{{i%$J9^HQ66yuBiTg6+s;1*WY%Vzi^8v@2?n9j7YXIR1LGG0xk{9yHZ0m>s!ful zed)4-M4Y<-Rf%e&zk*a{D63q|8KGrF=S>?beUFWPDK&#pWZiRo*5-*RiA)$#&*IWl{D|EWuMK^+c;k=Qj@-(NDNyisr3{ z5(RQ1q@xdY!;-F)Qc+96=P9nB>X?LVhXrR2eC3Ij+3fN?Rw;J z{+dHDI;YLy9-O2IOR+Jeq3nIndet!cW7g0L$>TBE?UM( z`$T`fBG?0iNwzzR?g9H0nYVYZ+tilkI1m7qrDyN;`cEV4S$N$&lW($@={H;Ee}DWb z{hQJK-)k-z8zW<>Z^j+K(Cr^_{-2mwdFk&s$M7!7bY5|$QOgOFXmTTzGL3kPP{*@nL^y7hp#Vs@V)GGV+Lx;u2^>*8DY0&|1ii-H~XXeAOe2@C0#plXq(x7Riq35kvfu}MT z>P(cjAK?fdnCB@q3G&58{!zL^3@u0sJ8W5A70vAy6z65xur^Uj&C-?)9>^tr;x}LV zZCv-9p^%7e?Ukz2Ojw@aTw1HcCFz#xJyT|@u3KuMaj*~l^mz4i?I*0JRv@H?sPI9; zCR1+iCg1#%siQcgLA%VfP=X$ud;r_ezOOYz8v-Q>hreVeJNr^pbaJ}zTp!N`63hD@ ztk1(N_kAE%4}Ay~pkEj?i`I>B@<-s~HlBgYYHh+aA+Hk=X*K8egv0nTw`2w{(70~V zrV&rqo_TMFs^Y?rI-@o&Jx9|5K zCC~rBaVu2TRzwj+;hDH(KWF!>{Qc9rMvu8o(kOx<4TJ?MOhAR?kC0RZOx?s~_xZSq z^I){n0S#YI@-z6YL79{?0&;m=yLuvi;=c1$&G=8kQaNGStBcN~EZ(R4ab2IUN3K6} zwk-Gh0t3phG|fr9Ybhvw31L$SK6!kI&l$Q+TQJ8ARL56{-cb(<|z84rtM;f_T4s7&;9n-M19`Nga z%dDf*c&^H8X{;aJa8^^s!)V-HMk&g3ln#aqS~@HgT?#i^hE?Wd2Nsehky~2d>q~!f z>vX0WHsa*3*O4llICM@F8b&vEGqiVLtilY|pLn`hAI)ZIZi8Wh4Y`vAmyo6hg_sE< z<}0-ACw|>id<_CTrUp)BTY>28e3;SFavhLEso-gJ5~tB2JhwR38vLPQ`aF1@09gba zm#CpKqCL(pku`t&KR6sla>ZJ=)r**HUK^irLF4&Xsu&_J;Tar%~qhlqGi_v z{_^5_a1o-PvBN1AOXXSDsZD%*+RKR|!uSQKCOUK&y9*zT@Qhe+V8WQUg9uipKBXR%I?0{iq(P!sTJxqmyAJt)~6Z6&@SL)S>QQyT}>$s}CC6rF)$usxWWI9Yo*jLlp(=qP=@iRe9TtU45R{tk|l&Zc%XicEi3m4Z%?$--WrlxqL z;DE8?4it-lKwKI6Nw}ETucta%sM*Lc884BtAN7m;ZLBN{1ty?BJMe%lBfEJEzKDe< z#p>%2S6RX!Dbs#qv)|yH6vMWAG5Y8j7#HAa2-3jf3tN~!r_4(;@8Ai$8Y zi6^9QLehxbA%_(}zcx?sjCO`jeWOtK0S)9qj`ydV{-AQ#xF&PYW=Uy~obj{}gQW;y zFnnSQI3E($B0MiyqDaHbdu!}TU`erYm<7M_W?Q9V45Sk}Ms1|Hd+5qZ9p;(7%t~`+tdb6Z$ugUjZj`D@SpFoW8x|KXJ1EUt0#+6-U+S z^QzN?1*?m=l4K>R&KXB@aWu(LizJq&3nksE#?X)gXyrH4Dy}$kwe!+jNJRlHP_f+4 zBAS3;MKRmcc^VK4vRZ0GTcp)hYbY8od4b$ql(bIC90KdK!S|y{3)O1kL+BUElk}Eo zhpD&sr-&@~m+&K?3dIM~#T{g2h@E(_sI+U3_&1pMqEOkLImQ-UJa~-f2wy|evYSwP zyo4v4k-cVaJVyQ9roi(6Ztr5OuJ9?W=ZsJYJk}dGPky{E(_LbjR9BE_l|6=xq@faD zCek!|(lOJ6YxMHzPzSJ1BZE@%xlp=v_UIvLZeKFv*F<`6U5qb&mQMt9A>*)Cv)g0* zRI>s6u~9|F59Czuh5n`MV*U42-|F;dhxfpYSIOL$a{5mV(k+NRo8D&=3|Z{wByk`g zDtGU-ewS+(D3-Phtsa`@)cdH2%yZi1z;-`W+2Tws)zQf#Tp7zYXn?_&SSn-InrfNbOJwt0%=3uQ6 zZ9|D5i?;k^KS`P`3Tpn)l+iS?*s^xJXcZ~dF)w9IUM^jG7^Wq(k><5w=)|Qt&33r3 zYzzryNBx82B)aKSkcR-BU*#VUc3s|MGQd(Z;_IFFoC9p?VcN34R zf^oy6uE@^9y-92$2WkCQ^PMK)*e=$Ua84cUc?iXiGkr{#P_vKR zc-G!VWlF+a+T9MIOk`(P7O2j0l;{z2f1o6_7ePt|YlU9Cj}TywLb4D9X>7OMDfV0rEuQ(=5IZdH(eScI<>XxkRCyYIusqWfGNBZ`=;tW@;vO9OBz zhH0FKzT#;;gi~A0zv<&P)MPY;(>&+5gbCxHLk%?g>dVkx) zqqGX`om7#iN6g6&3c#U^Y+zTw1C7`kTGOb{l`PhL^D+r1lVq)?_BVGUuI27JEA1$9 z)j>R#WNy?HY@Q#jQKhKhqyy5f!Q5wnebDfn7~7Zzw0c)AB{G*}pY|+DJ)zn5bfDRG zX`pJecOL6&fVogvJ3Hl&vT5FdJ8gE{t?FuUZB*1acP1qZGk~}nNZ90X2`W?``iR1A#pXs<|f7f3lxBnKazuv+?L;Dg8 zq=lBFAwK92ckK~ibEo!1@XJKK(HyjSw{Fo2(tzn@x$Z*K>HWfVUFjv^w%Nh+-7Rld zDpJe~l&a5Ap5cNQ-f&cE3c%5n(l92^E_|oVsX02*jYoTp$uU))Rv<7|b7kAKEUhVH zOfWCC;FiT%*QR8ZuabqTVmYNBl~J(dJ15OB)1MA~6lczNgETGj`AGwNV8627u80tS z#oaGZ?FvxcvX;ryBbSuQB6*x_oX25N)qjvqEm_x`X-9Fa=ZmLmD`rVENkh5oU6ff> zZ|ONW<_>hZm&>mQgb1Ze=ps1Xac74f2CFUL&e#i1Q=B)?b11=(ZhjI>6XEj{8@%Dlg}dwb+@9z1LMTuyW*EWObv=Uc!ko0f*8 zRZn}icx@D@xerv?4p`>!a21buMgFe&q&DzkmNj#I7*Z}BOSyeOxuvD`j$@X+icyu( zq$EIqr?rUcT6J!Y!DP#?a^obRAY}SxDbRT)+JNSL{!vUBogMQ+9F5s9C=P3fN}7VW zulVugDCbrxHZWJg5weOSJV4l4uS(z#I_X_vZG zmaU!5gpop2W|G-?CPw5eXCU*`_N^C_$8t9MWh^ERWg8VOm9v03464Js=2&yxSiDgh z6KFz-&Fn}U2bp^3E2vbs+s4+#08&5=+#g@8lPvbKSTKpMmEr3SkbRkkXXXt*-$=?knbJqdUB1V!XrDpj}xEX|RY1h?AalXj%n;zA>QQ8fXDI47nQbQ3u=J)lO-XZee=rwNaW z(XU8H)D%Y!Q}I4I)L%c0#d*(#n?J#d`Wqll5{4;&-A1YZ&^X}wB?^Blo!1N6y(UW1 zgfx_e0i4`{X{{SkI|?o9;+00$@#w}Qnc<1QP6k4#WuiKp{#MlYT=Qws#;te)6NPNU zB@Jh;9wd?F?dQ3iOurI7c;XWm77rIUlaf^v%x#k!$mTeio`HgB%4P{#+DM+msATq> zX8tYL5S?*WYNV_u8-t=QI_VBRS<>ypdFMRb$=7O2cDrL(ydY~3ke5~BFj-14P>~Mf zDyf&HQU~3VOflU~Mzght=+gRLL|aqnj9mu3pr85mhyb%F(XDGIB!=y!HI{ybOFkBE zMj;^y*{j;7F18ifCV>Pv%n2~!nAN*>hIQ^eA@+B-_&KSR$f26ZK6cE* z`DVmi;GiMYzJ#2+D93j*7yCVxCv(C+6`dI2R)TcAj8Ub-9M*8rBNo%f($iyTwt)Ip zG@V>qwS*7(7trQW7-o4-PM-J*4Yqti7G=pBmSG2In8YY@#doRoWl@e3}@6)gBh8}0O|o(qs8A8dZD&q+Xh zn2768aGpYBJcL8RbqJxK8$6q)9?{jST@6u=2*uhSAj2}2F_nMS_a>>=K5~~8Hsb-i zio4{#?39WBI(fsbfy}k#{^?6`z+6q?{OM|3Nns14Tzl68UaP@$di}n--@@X&=}>0- z2=0g96FI6JlH|X68hE{X^jMF^7#;rV*ze{1UDdIl0rz<+re(Xl=?Y zpW>|B2TG>lr`Vr}__o0oT4G?@Sjjl}q?gJz<~sc2J#3iDQkBRwg|WrU%@~#SxqBQ= z55r1n(;E5aWJ3@5q}vxk_csn54?Y24?+6j@=!IvFU)fi$J#_PlNb7mclMG~ zJ294R+JzAK642)mjgaV4;bvWy9rh*O@~ZBm1*C}5a$9+tA=L#aPw9bc*o83Dc}nh~ zC+ITig))}1tSjMD3s!JTr^$1D2HZiY_p+d;;#AAckR9A9yeQso%ikw6JUB1+$NsOc zya9CdUm){Wy+3%&(RUJUXjWc!p#hVyi>0CmEQ)DvQlUa zm;0eT^&fZaTPzXe*`$6T#>YHjbLLBX1}LnoAa7sN+^ps>W&9xWnml}y$hjxaJC&c8 z5spPo31`{EFhcbA3=kuDVc+}pkqn98h*^0~-1P?Z)i3k8xO2hpG0ysI$l=Wm`FGe0jai1Sm* zL=Q#St}%%un%4KacWPU9KM+%_W&C;+hA(XATtfMRlqvUu9bi|2@ItEJ-piLdJm zavQ6aq@+1_+aHOsS-zjcQ%wLk{OB4njbzoE8V-tp%Y?R6l_sSa&eB;(@ei0H%y5M25 z?@b83K#t5iXz^%Ae<4(AaoFOfk0jrZvRlGo1z{jzg#c-~Q3SKjSlhWK=vuLx8*n{K z0Ys1PI5aJlunJ$(UbUEz`%fi)g-7ct;qZ?C**UuvuS1;Z$b4%=Wo^_fK9xb6!iM2q zQnSzd6Si1Vk9nKRwx49y7s@{0+Udpao$!ZAYFhq`zP=QYdV#islOiKzp0v-zAz#6c z)R)LKLhpI!bGV8&lI4=m&xzL`4XMq>T*=EqY;L`2-~O9;x5e_YiH52E5wj{=vi`=XUm zif>aR=yfH<5P`|GKJbvEL$@dF$Y$`4&qE@ZiioYT518RGehc(mNQ}IR&mdzJKIo)Wd_<~>(4!dal)4Ju!*=DKjS9zH}UDJkixKi{ZpF#>T9282l+)6wQQ&-XNfsrTpW zJ!rS!xG1?EXa5BRa0;y+h>O6u5Js=I%{sI^B*Pd&V+(RRqhX3U;HHUtGE>4(zkawf zadjY4@Y(Ol0wyr&)a=rp3X?bEmy!OL)Tk4gOnp4Axus}t)+k$xmKoMss9Urm$qnn) z@?otQ>VT=;RN8}<7&cW{Lt3$VyXUsXed5yTJww7;i-dMwa*NX_MSh{Nt0(2^fFVpj zS9?yqz0+>ld*HZZo5+)sk=>l5SX2C!)-yeppAJf7onnxp~r~#!HIw+OKf2o5Ir@hNt!BsvYd>eRRE(w3J z*R!(m)dufq2jIWqpqtaY&GoQ>^r$BIU8O*HZzH{wzfm_wl>f%p?sFR5nSos|FpDNV z#wX@pIZE$ET_xgV@q5D%y~qAXyq4vRlNS+_Y4(`^^M#F&5R8#|I3tC zyrvBjKg!S-G%(7#&N1kKrM0DBN;AVvWkYCBiWq{lxhsAUVi7fyk+bRn(X*Xrw*~(D z4{!3lR8;FQUbB1Oo%O?apChBkv8B4HA9%YmkZxLZgu&RC%_mWspzE}HLxLj`o7s)h zx*~Wgnq==R@NsH^{Gx+zcwx9K)7&x@_Xt|!c=ZvuAfCMga$rQC7X85bgNFIQOV(d8 z02}icR$lv`k+~@OWQ_ZBM+JKb&Ru@Q0f zkK2568ml71`NK442R4WBiSu?SQWYm;0;|7I)HEjg$l2q1mp=^&;_Q%amzO()fzrzD z5zRPXfEFr04ldJuYDAmT6^4jahKol_mArl1uc}_u2CAZeCV6W4T^V9Zf}XpXeQkkG z&rVV3-pdr^$Tc3);Z286%{9dcuS5d5FYO!45oVJTww(vPV(NZR(7-GX(<<)c zZj8@-seGX5d~Cv`zCOaNxF=3@Zx%-`om4avJ_1E#<_+^21bX$7a`k~7oa$8pvD#sZ zRer;n?IBXt(G`ERDn|6##F$rT`LV&Y)zC}?ACZSMGAHXJt8Jv=p?P`^G`?>C7%G~1#o&whkz zG*uZJ85`CB9HrOlp{?WNig44-oYU7ET_i7I+1T<8xrOk;$V)=l5#;nMZB_yR#$h45 z{=u@IRADxrgkglIgD)Gz)@en{4QoexLwv7oM^EfqTQ8Yg97irPugf#w_&;l+Xj}}C ztL)?)Dv^)&IAyf2ek0h}<-prG=`jIpcdftcwY5y!ZCsi4fbUc{#4yq_*1u6$pc6uY$GNxOi_XQ0Vz{>={ro6DVv4o?HVVi8xS(R6sO z8${29@JEKtkLLI^S=-b2_Lqc^Hz6F`JTUN!XXdZXtA1dNy?FvMm0kKFoTGR6Fm{6> zQ}%At%#tB}@9yA?XB@o4zn)oa(bt#g&!=>^hw_NJNH@k{wS0wxd0_;*45!S+TrhF6 zb13;Fq-60DaXoXT*!}r z1r}xBqKeRjXV2j%-4LTF4CRQ@ICX%7Czi&-ke=mCK9rz(aT&#@QoAmLfW1$I2qou3 z2+mnNY~mA>KWmkIP@!A5rV$O+UUIWjR%~4SjwIB(_zly3^0` z$t-%M4Y>&(LcC%fm!hF*d4$jA`*_fN>ruj1fRM5@s}oT@S#F4H9GGSi++@A^X6mXE zOz|Tir*H+Rni87I=16eN>CZ>t&`y5L~I#yYZ5WTBD#G#HwE{H z_*~ANNeeZww%I8p%Pb9c(I{#UJ(HZ-s6S#Q30YaCzW3N*|H|Uzju}j%Nhg8v4c4Jv0CG(@QOgs?+(8MFvEJH9 zAhk7dOPwqS5(7=<>AB+)W-vab)b{kS>@Rj5YzK?^Ua7a?DGclt z`6ePDdk@_x6UjSNH}tt7U~9X{s0=A<;EMPi&*xV(-F6<*=Wwyg_+&8gduX)|hoo%W zwdr}xHO?pDj@!F(@0RNm=;nJS+gEou(&tENvg;k)Il_$%(eMA36Kg2gT9~QFWCg>PHgc5f*wVc zrl3`v>hf+#u~+RO;lVz!zxOo_=l#iYYfpPeHlX*34qH$mZRP{Ma9<-1uy@hP49Vzebn zw!KYQo+dqU<2KL}$VZkP0S0_^)xA9z4{Qrk zs#kK=-*@w}H^pJ1)|&fN?vsJYNK2elJO)LZX{lOQ5R%_)GbvtXKCaf+iEAVCRj<{6ZVEqtEsXM`ls^cTWzI4wBlh=~ zOxPHxNVD-u8!=00$Aa*f(dBb3piB>|~ImK9Al_d9WOvXJ`Uwvz{3F-kJ>%^%P zO(i3t92Q?mipq&GS)OcEp{w>K{BuXVySC=kgZmETwB_f5A|~FF%Ul$d1yo6KOtUhL z@9&z0qo;sj@DE?P<+-C9C-*ci@lD3fsZ_E=unzP`cMpM`nCh`LEV%n1`-%fC@3J-- zk&M*zav3&4z^^fn58Tgg6(4q#bxFojn1|>wF8t+a++=GsN+m?l-kVr~x;X^LO!{ zabjx`hnFEF#qe^4L=u}qco#Wez?QYm7q^nvD)PnwBRmrlE86t4u&3g0&x$RYvr`bu zP`Xr4pfo%FZ$wI0W5|T$JB@geb7ql3GG*|Kc@Lg2{rs!E)mCshB~6z@0+gjH?;nl8 zXm@B9RL?(mJQE-y$x&JJwaomY2etbpBAS0>{t=ev|IMATt9h$l_Ja|-r3V@*r{K|h z`7-?n`g6{-1(3uEDDoe4!UTO@sy-{OkT_2rUASs%zb15a=_Axzw+~RaCVh{frwkYy z3iMa+5W|`y!TbH+2`0ZVN*{Kag&6o^{DUqlJusrGb_bb;wykOqb!PMvRK()Dl^gA- zYkYms7$f|lnuFrX;_MQb&J7M;Eyd?aGPe?L!R`sg?;tL%>Bo)jg zD~IltQ1&j$a}Sv&T@4w0@;LEHygbz-Hp_J3%C2C&xX(@&PzT$+l1E(&SFiegWPt!&Y;nna5#%$*DE$<&RjgV?w){46pbK6ETl!)o1-01D78(#DqJ9R zj%H_mV2)Z$ORK5=LRh9NF!R@V;6NG$^ieAOr{QwSl>~N?sIR?T#cI0#ri@?0HH3(M z7$6;&e7K9Y!=yL;qB&z1udalO5ok1uis}2S{F=0vrgs5tHGL=7hAGl!P<006v${Wh znxBdP^^uuI6hEtbv4|2XyeUW5Ru5xKD1O3s?AheNIjog!hl;fw<{uUE!8$d%AJ!iVHAecGP?NOy7fJiPN&u#iMihc=$IKUjJV7BRp?tuZV{H~$Ln613 zX8JAfN%#ub)yA2)5`|*e;`QY1{xdW4sf+Dyvpsd?Xv=*U^M~5-Pn~7RsU-oJ&eOo^ z9%!9s&UQ8Mtv|^n7sl|ObI^FjeNF7`y*q0<0b998SN5)neU>1)N7p=XTV&6`aD4mM zM1FjS*T`^uB+pE6d`H*Nem1txB*D6f?<~Pvw$C&@TXxSp!F&ksM8SM^&rCgR9PfdB zx{#ldeOnyw{@Z*U@8Nx2ke|VQJ{;}B*VdDNn1W)IZB<6pQF|;VE!gi6_A?gj4@uO9 zQhU{TdcY>JI4lX-LzxomMnH;fSrhBbLDG4wTG8Frp?Su)&*|M$MpmdZAe`A*@Or)p z-K?gf_N>9%T9Z+`=VpF)?3M>sygjUwtK!bKheR!ZnD|Bv*}0PT?eLtrO`$_wV}mpQ z0O^ytFB?qC5H<&VCe3a!zG`0TXX?}}hjBK>P2AVef=vK>VJ|t`oN2R6NAJ#mcFwT^ z)}|NQ!hBcjw6{v%^4+=5;g?N_@pMLWI=K*=tat!6i}@7(zImegz#`O`3)X!G)BDE- z=VJ3)$hB7UC9p!hb{jIO%WX_o4}Y@)FdxsvdDyLk0ZRJSAB0Q6W)o)_Gg?1*s5)euLdLsWlg7Ne$D`xii}-&=@xeF9SIY zYxFTS59Iz7GT{v~^l!NFehSX#L-Nt=Wztn>rBqy%j1vK=bK>>GG7qyx?titWdKKbv zN*h=^Ik6z&*I-T!f+~X@HLswEO#PWwM$Gz?{D)b^u;VX;7?IAWu&suK;($yEqlquN z%y`}US#cJF#vRhE81+Sm`;F9GwuQ3>rKpoI5K&1PiRfGU0gK0rHGPLvk5v#h6Mx0H4O|TR zH6-!I-zV5JE`>sFfvhpG6>9nWaHhfY!Iaa4U#O+0O)m zP??FuvFD)X))_c|<^4iV=Kmt7JJWy(*U)A-Ux+V!-AE}88lYf9BN}n!Mmun(iNOx6 zI~ZU5iz12hXO;7-o5u72C=z+o%z~N-Kq3V;1{H9&v1I$(Yz}K)kYEVJ|M$(oE|wys zq(qYfDX4G-C7R)Or12`8iYPRFPOyF-+;9);aKr?0xw69F|A)1A3i2#yyFI(hc9(72 zw*O_@wq0GeZQHi1x@_CFT{ZQdFJ@w5Ce9brx(4CBLH442QQvq()j#>ylQ?EBIR8`)ViPLHDTM`ugUy=A8lugO%PrPybk( zHzWePh$OUzZ)2MrOkrs$VI^@^jFX2cEX&)bPbarS;HKvH-1qJnX4p8HBR&{PD)aVx zFJq5W;Z-`5e0X!y##LLJ`Am>Cb0CPclc5rh#t3Hj2w~1iszJMag(p7uYa#WBp)gyt zUfC-8lT6Pyz=Zzw>yq6UIeEPQA)~*9_P&=3}`QR?hkCvHdQuVpoCL{Aa|IJu%Hg{;gEt3;o%Q? zBKeMy;#u6iEm2k6y(m#t!o4YRS=_xUaap2Gb?m&TQ(z3Ms8d2b$%UK1Hu(;f!Zyhv zC$UAMO?Pa)s8dL?a}O%4Wp%=9BWk);$~2oV*ac$)`g!;JbH$E8NuR2Aw%K0K`m#W7 zcIgRSDN^7NU5N*75k@qx_)_A=3J07Qs>#~AT(t@d+!*Byk*zceh>ak-upCHMlv^Z= z@`ibE^32Ik6Jc5o9@&j_PyK8c2+vPV(G=Q?c#q>u%P&UItC3T7M`iGSk=1V<(Y2J< z4-NmRVi>}UdT)PWA57>G`6qpTXijbxAZ(a5g@F(OVHxLsZ>x2FM+&BBu0~gSS zYmosA<-IGYBOMaab4iF`tt4mtb;DsO6k+B zL$lR>+97wqyG{(#hvD&07jsB}<@^P|4MQNI8dwV1(I@+(&$Pf#GIpBy*ZR_;a3F2_ zGD&tInjw@o9>W^e;ukHj!4h^BGgH2pusi;bRS)&C+orIl2EUl^%X2pz)&u`~A9n48 zxNI7F&NTQKpSn9Hq6%vN%TpD?z~PGl-3%`P1W~m;^m=qk1nyS5bp$<3oIvD|*vZhFawMs4JDf7b~;BC<*E!*uN2H8O4+Rg#fJhixPl1BeR!_x~v27~0u1 zw|fSCNtHg=S1`LXdFi~s;F6^B=M2%ynR_&sCYW?5)L<`+Lbd0NNOT~wSjbIzAXQdf z;&dmM+t;RqQdpJwU@QEoEh^%~ssh_Rt{~S9z-TRrO_K@1H#AWxuAJ&`y+V?iKmu)6 zz~`J$A`l|-f{fu7PNg$kR|WC7!uiidqrLl2>;v?#Uj#(|ofGu`gA^}d zWb|KByrYusk1YTHkmAj~uv8Jh`82nh4x@-D($V>|nZGSh3$(jG#=T-7 zoCb8*;iVURx|{8K^48>Nav~w;Q4m%IMCV*I19r_IKzSwdN00wwQ}(aIo=R-{UzqNISWVNuvl|cI=2X~L zZy#2L9r)EjE1SI?+Vb9H=C!79XOgWO7Pzb9!}{w94t8gP?Dmk@_0bM4*H*x@!$ue3 z7TMmXOXCi3(hL4~_Ra+Fpcr2BKv2w$HQt|F21Gnlgb)P_?qYO8QnPw89{t#l^kVd_ z)=X(i2{73ho5_`s!A1j00Oe&) zsEde-aM5xRXPPujWf)ftff&?tWoZu542NMEq;8|Z8O1Q_aQ$^|c6X+LD=&pTlGKnz zBSWl#t37F?U|cDYu(0y9@VwF6LN0^0S9;3rTzy&O&rVcXFB3HC!IbVfc~Yv15$FD9uFuLu%0HF%9Y|qDQ^3 zW^?L^)Qg@wFXw2odP*MM5xk<6dxc>)iL3I_Oo|k&PQYYDEF2|ra5+}FyVf9?8S2;s z`qLjHUwPU|Mj{555E|d$BqM(r@u_ugykl4rK!BP_88w#@CI>DSTCabe%umfWbf2;=T>ucG>|&&2(ac7{y&>XmL2{o)2P~+C@TsM-7 z;E=g1>iyfMY4KLLbz&>Akie`JlHGlspdJ26gV8UV& z?$D6Zq7x~R0!c=W%<$nDu2Tzg22;X}lgxqk-3gCj^F`C+$rg6NrukH6tP}^;o<5{* zF9)LTkAi`lbVK5$-f#F49yomKj3_Jah9oQT0@h8jtBD?aV_p5vmBb5=FZPDnhkRG; zr7kdM2LqCCr~&43Xv%uCv5>1W^)!74D}pktk&mxD>%ky z{P0Vr|N0gj(s$4i#xfjo?FVgib)ZI-zhBR~cSW?iCQiE0cAu?pcDbBb7l_0%8k`(0 zqwI)!JLysqczjC+>HCiZ(sx%6{);jXybIQ1XDwanzAIWwI~q1#6%hDFIyQ zneY!@aMQi?2%%2uvN2VrOW86tOHAy()bv_|(1N7TWA@ZkUo08+t=LB&|F#}IH~Pid z*}cdc`bUJ?k@e}4_cG|%GC2trAysk%=RB;J805i2be)ZEdk>ARMX^x$!0Kyzad!m8 zY%@Roj^T=WdK7xOG1Vk%v#m`5Ckn;t^eGeZ{y;`_tLH=9gJO{zu;zl53XExFxA*RX zk$wgDiy=%(-1D(8L4aX%{{qucV%`G8=1g%Lhre0L?#@%Vw*#EJ&_xFp9w2lRoe2(`%i_yAdWI z2lI~;nEoBpGu%)TGB={YJFSU!8{?m3qcZwa-k7So9Fxag61L90VzSa%C=1q}ih1}3<_Z_1~Jj{D@=NbL|F`{v<=>%K0aD_d>^@5H24 z3wI87-XelS_S;TemQ?v1JfY&gMu5F2?d(MQ+6qVS5PPXxZl)uJkSgTl4z!bZuAf)h zmGer9&qMV%D6J&qeE&4&0yg+Fgd3Y>MTG4yGK*74z-Jy|gvhw;KXw(?+ro(fr#{>G zwkh|jwk#+w*Jhv~sD*@Yi+AYSV?Mo1Ta|J+2f{ov;>xDnT0%O|FJPeS{!eoXnL_z%Q%PLpnpu#k*mK()m1ljOr4Ou7uwq z0X^lAWC+Q)s~}wFE@)%&0^3yDG^TP#7G*R!{*z5tFqB$VrueOA)~5K`g|LS=h*tOx z5QLP0lH!7Yk|A9xQOfOu@be;;vW{K}70RwMTUewx49N^Igc-x(*SyV?Q4BNvQc2W0U+?yC){%H$CMx-BqOTS@H?L9WcR z29;y>&OG&HiEK(frwH8XFYMyEb_kWFTl)Xd3h+mBWVqSh7&oZW?C84gFx9 z_*Mo@{YPnP2ICDjMe-n@2boYRLJsipOgNR;bbY^09YR?v`5${;;L+GZ-A>~oWXL4;}r@k+4j_L5{!@fSr_e;s|g_sjUh58Y?ZUS^$1o)Fb+)9;&q1m$9dN z43^A^ZLluFOf7xUsm@q0;&n!e`h$C(=$d_pss>E|>Oeny9Sv8cs07}EUD$SvUx=Gm z%IQaj*eNLxBX@ZX9+lsGqMkPWu6H~;&i@PlyhN#T&-@cPW5@pQ4sWXen=0}DyY`Uy z|B9|k+v*$r->d%>rDPZRQND^>XH2h_rer$2%v3kXrhQY2`V`u8V%l}6a%;}hBiqp~jTWAYLb?anD|Q~hAHvjR<% zCGiBQqAZnccxaT!Q44WBcC2p80Nn#T4+aZD@MFTQE-wtSOP?Xb7d-Nm%DCK49_%F| zXzdtBU$Dsm6!5&o7&;%WKIrYT`rMl9DEcyNo@b1%12cGG(v*l$$g0E&*tigXIl)_ujWqMez_e~uCxWA$&0o-I++`Gv;h#vI2Wi@Pg1zjp zyO^$(($&Aj==7*n$?8W1^r5P40l&q!8uY6&NOwp<(kkQh-~11jn91{1zS>Vl4d}nk zsImPo{oGRjp*{VdL?>c~|FS%iA^}kS^aw%QFRE4kL&&Xm)(D+`%qeD zXS-T%zu-xVPyQ9%r()oCKJ(~4ga74tL(GTZ5%j86Epbb-B#mUfQyS}PI90C8K)oY{ z94L}sd)qM5te#?xLO?cIG8WV+#Rdlz1Z61QRWF&%F`d6!IcFN-^sIVWD zOp4rL*jG*%%2zgu9tg%e4P$8hit=Uh0Ul09)I;eLVK{<9}bm2pZopu{Li5e z;{P8eM99k7@rQdQU}L1JZ|J~t*u&h{t5O6rP1I07J%4D zSo#PQzGv8u#nL{RyjkTFp3-xZ2f_Oj=}2T(ey@liw11x*GMWPu_c{FOfE(6d-N{-U-ZH0IVcg0>qLniR%0 zD(F!bI(p7udA^evh+P4;*|x4R-ijGc9H-Rq3hY~2D1*EeS&(};o_d}Bpih?m2`5SC z9G$OnF;0_Y{x(oOx$BDIBarv&++n%zekVSPY($a*KMZb_#;t)=NouJ%l> z0e{kfJ1h3e$fAHn13$toG{88GaA*c=LN0_pLT(<9PJ}T9{-1lf^oj(5>rX^3^}i*2 zu>9{Y_J6JHrZ=P>*3jZjhGCbbyWz0IMQ-Mp2zCx+AV?{&KB)D#uq##LtNLz=j0MWRSs8Fq-p`nqBO>;nqjR z(ZFQ8)#?5`5uNjT*BA0zub!0)E%<&D_rqQ8*pnOoMfT)4PwR_*TWTm~X1W0POYw`T z{4I3~kL?B7{X^m_aVm%Pg$eiO*7S67`t+D1;M@Nfx9yGY+&wg>@9YlU>4!1AZ_xJ` zaKLK?*mu*EZo&FC`bP`MnRCGR)PV2w_RK3DH+?XlZPB z=G6A&;q~ov*~>K8cSMM9@3$m8-rTepE_=9d<-IJ-7h9IE#Z8Z5gRk3;_?K*!?~$M3 z%W>dJkJDEWc=5gO`~Yvjx7e|+!sI8r&hKEo7yMQ+2!guc8JIXj2yHa5q+^A+kgL19 zT$xlSwqAr+B`v*BzjpFMLOLF_Q-fG=l?VgvM1+gJVD`u{?_hMn<-B0@BgBCr2oH2~ z2tI8w`N`RK^nE{45p9NK$$zt(yTRx+5eh=mH~iv>82KASl)^={<)xBM1f*vM@!&GZ zVs7|^(S@W5u=Xef%tHu@JbPyLFn^X#4AKdTu?&L2o5Ru`n8x+^grOk!pcq1WCyP2X zv?uO+LD^{xcy)$=-qcGY40-IzN((R_aqGmXi)oV&ZbOC?V$?{Ju?#?Es@2LOz+%)$ zRFFGa+SM#W_qpw=%$NsngVn@dGIJx4dF*%q{~q^<;WtQRmWC+WA}K=)$c>4ELM_A7F$s%|jcU?3=-H5szo4+k)9+bh2zip&>q@Pmc*P z_l6$ckj}0ZVqVf;IPcvwYZN{!PL8n_?iZDIGn95Q+dGo4x{X6^ z=LcL*^tqI~qE`+*+B^Jqwo4;2U~aYHJNtA=G`1@vuHAQNzN~O3P+Ly+-f`W;HqH?F z5L#xZ;Vj&^CXe7@?Zs#-Q27X-oiOtw zAezPzO8aY${J$z7E_k8kccb@47 zzc^>R0Y3f_`B3SQ5q?JZe(0dtx~1xV2%z~c3}xW5igp%7v^d|A!EVAnF7IF^uIM+=hd=u!u%pttPLIxY*vI1L5*ogZL#>V?FSJF7blo8p?(Hm8Zc^Kik z(8@bv6M^TRCA_v%&rCIoMF=MV%bOVG(RKw>-_2Ju(|Z@)d76Saq9=fLb!3@mWOe;9O}5nBNQY14&}5ltOpEEngNnJGE4_f zg<+ZcBWb~zL0TlH=MK@d$BgvngmHS6tk|K$0rp^^j%#cFaYt+X?47(bjgV4c)Mm1c z!~W1fdGtEyZk7X=x5D(SWOJRY2$GdhO$K=oVr)AVL$fQvXKt;=cV&wa1z4;ghV$rd zXDQgOcXvtmXbU)EEHbcGa7rP-aj=W9VQS>{KgG4BQKEZc{KR#n2sUDRLsG{z8XZ=L z`3b5x9S&ca?k}-0q_v%2ekTvO28}t7nH~bXg5Xyubw%*ifQK z&XX_?OZbAef)8ZmnLyTl#Zi4{0Ka5_-&wJlr6se1wQ8A;fi_~Cf3sR+TNeeoX1o;- zn~>$AL?@?u3nz+zg)q>r+aqClEjJFB|D+}KAX1(%d3d0S+$MPJxFT$=w~wXX`Ph#6 zWuIFmKrkjx(9UQ}E<*6`p+ z^1_}fJ-t;htRjY!jtajJbY!qGBFO36baOG4sH|)Q^D9{Y`THF?vDS~7J=y838}zwh zpEj2lz)~3W6kwU-E?2`=A_AJV_jGP3q@JO7!Mc|qp%t(e~p@ay$g&ZS`5%1`~P%o%XCc{@_vd24^2Xa(dwIG0046F>SQj!LVR#zBdh-t?enW8H`^s(+!$}Gswan7~ z73tpJ>@pn)63J6u(ix1IcxGHEx)vmy#hB3(d}i$%b__S2E}^SQ0j}w6cjrx<3D4X9 z7YbQHOXQ#wNDC=?B2Mn2K?$w8Rf;)8;OP9L+SN$;uQHi=5ApP!a^AP@=-0_8(Di%< zY{Y)dlfC_+JU2mg(~7hJPZ#it496@?0UsDC&LhHQ5lxMeezev~_Q!#pT2iWhHH=8H z^;_5^Fe0e3Q*|zB0KhtVX~kXNksf;uJJNYZNq8N3;X76@(9KuIF_*^g8rxo=C=^!f zN-VxSXxuZoik zHc_9jGtL)t?m33^L|teUtkYNe)bmOI%n-Bo)cg>>_SEtrP*zXrco64z0Ij5xJN3V# zcJf6LV8hFASXdA7=3U<)T4&O#7|x{a7v;IGkfTdSq+Q^{&T+|hW&{5MvwTT<*iAOuwMIUQqx{5)(X-cap{Rh2o+D<5 zSCFEt%c}vF0@>b{bHHnVZ6qoK`XU2x8naxUNN13xiTefm7bI2U#mwIS&W&9)fN3wC z?g?uzo#%)9A&TO`{TZ<%^`99 z!?;$@ezky+Bq*eO20Na5gF$7`fXP=)iF>)}cCAQ70L7;<4b80{VK-&EinCRWmTHW+ z-$F2MlSajZH}TdMW+Y9d$oe{YW0X@2Z#|&D+)T4{bk??uJi-WV5p`;WCptQJr*~f_ zHglWE^oeiX+vM#n@`Sy6h;d4w2;!8UPwP|PkknoUB@NaWOG)+OqQQJ zgv`zg2F%*3`D=B84v2f+u~CG1vAO3QjPC94XYIx%csr3Sg!8Y_bz*tCyt6PkT!>oru1LIhfNzD~n#4GeCtRCWU~c-%@0y0$2gu3c@3r#mHndslcdt zG%I=C1FP}MEPYLn)K7!!tB771_1cyqBhcQuvOq&dK`2%_sC@X5|jRl%v*CvjW?pyq#m!$<^cGWy&RQYR-Ag zHswrQLJ}%aG$NK*PbE&h7WL^V#%>Y}sb#Q74Y1|ku@Uxy{jXsJ3!NX)rnbVtI|;9-Wp?tbac1Ta=PK$|AM!e=wQhjqO9+` zPPcZiu3`TrFbDgPd!m;ENV@nDt=_Jgafx_%&|{k^o-Olx*D@o78PFrn5Anqf(NhZ3 z#GDZtt>Z|g8kfyAFji+bqGC^qD&)eQfTBo6PxALb@~B27Kjdk+d`}}PMGh8>wW1`; zoE&X2vR8YmyZlx8D{Viv zY~{h-goD2A?~lB>C*4vdk&qUYEH_bfC^2o+xKs+GDFj$_Trf7SB?&D83_6PBjU1g6 z>)rdSH8w5T%Q^&5gxZj+Rn&^bL{}EObw;k3%RQ$nRo>&#yA^&HauhmQk_!LyQXIw$ z1n;)FYM16}nd@Scd_`g2^=@1|?5pAfL2H}dglqC%Z67gFNPwOX*g5UWoe7y?g!D3R zG$nG(7Z%78n9MSX9C66~Lzo58oHczn?(fj9QWpN2> znbBQZd<>Vzf-z?DM13|)+?FpT8(>faO3<`U4SP&^)^C(jHx77$@QnW1c}X9n+XSl% z|HYg+bW>ohWIfzaes-3QD;I0gET>v=bwu|~e7Tk0`_ue(5=`k}`^cVen86Ew&&Y}d zByIO_W5Wyve35nzepK^-D+3Nr-xI=>A?xuri$JEj_z)k70$z}@0wAQF<18evm%-V< zSVQs|v}qX+HQcd--@$Rm&%{efFfFac1JhZZ3!@6C)+=gEm`mkPd8>THFJCIxP%c8} z&4$SgF8gk;>{~R+U-zL(CI(6*yoZeVOyE;5#4cnS+sre}$^|EjtrCX|lp8|@Krb*| zNH|lxC*Sg2YiURIz7A*~F!uMz-s)Pe?sCULi?zsP`8&;I#+aHbZ(P?;4TUPMO58H; zgx!(OFp@$Qqyv-`Sw5^~k`f@{Js*Wpw^!i4P!bE6?txx`tw!TllW>| zTY-|!a%Jz|2K8900JYUeNMYst0-Dls+t^So>w26Emo>c5-lh33k9fA`giWKnT`!Pe z2le5dwRD?$o(nQkydklS3xX&5Gch(akPBERWg8MLW9w?e+6$^JykR|QjpGd9JUcya za%@Q_rPbR6%sryJj1$SyET?df_RfEa%aV!J7$JdiqakhpA4UF!}@E6%$NShSu?_DmE0(`G{#@W8&fs;hY;h^EMj}gyJk*`o*A??Ooxwm zUDu2o+8vrZo|&qzlnN-xxlMKC)W|W7qfZ=+Y0gD z+F?ZJO&$A89Ms7%`M--O^kI37eGm^l(IXX&qLkFvVdIhTYAlGHaiWC%pW5Tu%AmEh zXs?sRi_Al6wR;nv$MG^c#d%}x?N~F5mWWAO;!K=l;xn)@{q==26hs0Pg+e_M6;%2Ja=Rx*`quY=Gb-= zJsK&{fY(^zF0CYM1M2CHHHAD{R_&zU#eCfiYq&O|Y-=&tXb{NoVuoLK_`$8YSQw!% zI8L93U)ffpdP}FKPrsp5D2H<>eFJbH1Cf-VrKHlM*?baZn<7awVYph zN)z00D2j)TR}y7M$N;Y>o+2r-8Fv`3l@z|TIZUr0Wan1-}|2+V(`)25_*G4xCykd17oepvZLQ}|Y(_x{O2 zRQRI7k}r9eILGgUc!oW2NV{`(Dw%2FM>B^MQzIMOPP==)gH`+z_=@YR-AcY@e9JQ* z2ZFT`TUoRrk9YC%uY?|>TT9jp;al5l0kT%?rr4f4Trd7WPLq#e6q?F#MIiI-q*+0+ zfCOEXo9l8=?56rp`k@Q>P^+X}kDd@m6#h6Pr+1c&Js_uS{8{?7`=f#4n~-njP#5r; z_c3yydz_N?f%3|L@zIlZr?@&-;wAG2l}YhECHG_XADs^-q1cut`lp-tG7&}+#elTD zBoUq13aSd&<1rTKR*@tiIebVIMXKm$Vv7tVQEvKoy1%8N(C}G|`HoFXzqWm(Q1s+R ze*>)AO|12ho!7UD^R3PuO?|P0C{x?eBr`#T)Yy(}&EZ2N7;MB%gcME`V&0`+@m@&+ z?tCg44Q5U^-U|Sfb+Uu_d=uN@*b(V61nNT3@a_1#gK-?KQHB)iYyq) zKQtfvdp^bta!v7ZbXq#{3ZqHorC)j8Su&#tD=-D1%N<&`%E2A(t zX-8!4Vs$*bNv5Lu3X|!!)|1HLZZY4lQwJL~Aijh_%pcB%H{V&>@Ltz#VX@yhfWci4 zV{J_>TqZMqYIma;JDLtCq?$uJl~zP2k=c^Y+`t_!g{Encyhr%8{-JL#byy}3!!X-S zkX$9;bfYjYRgGt`lnCMaa>-)YVaX!cC^jojvUXn@ASp$?R!+V*pY+3rA4MF8Kr$lqHRON>};Ayq1;Dr~CJrcvb=b0VvW-z`3?0 z2azbsvLwVYg>kOgda@??R1I~Cw=nw?I;v1AQM9OE{Bp^m)3;F8U}?{vlH%Ik-$o*0 zBRU!bea+I63sYRUoQXk6#TB!IanNZ)(kf<^&oHtOixpz+Pg0Z{6rU#33$meJn=G4Z zg;`h@(NW}5&@r}1V2PxZnJL~Oj(cdO7l9`goa(~)R6Ck1`b%_%5QeE#qx^NaDVfk` zfZs_ngQzMPDt!!*KT4NE)6TlM5WN&Fu$U0(_F-Y@An98I;4XtxtRSditZ0cfN;~s7 z5dFiq`V{>;b&WX^vhmbt!h4*;ymDj1Mmt_K$8R<#zX|YrtzqsWCoH}l_Z6n;%wsHx ztzgcoWgzd#tyYsg>=&D822F*?Mw!3P(04W9yL3s>@-J40UoP$(+R9p`5Co^RHK~L$ z7#*EvKNr!c$1^Xfe(#K>MNNxV15nZgZ4~bfo1}S!rHX%C-`_@W{w`u6M&JA`sep;? ztA}`4X+8>wy36i4AH5txi4{;IoQ>-1yBd%EpF`SgLPp|yuXLHV7!iE!CeUL3pSq%j z-EuR=P2axnqy|L~E9P-?Gb=R~U&sK4u7+cax29?8u$pj68SI=(y9C@Wan5#N8u{WZ z$A>B$(J%=YKJNFc_6Ki5jzo9J9cH|QyrK5&4pv5B$aOESDOlk{CPrK0Svd~*;%au5 z!8J2>Y-yivqj=q*;4}qW>$8l8>~*pFyrXQ?LUA1Ps9SJ+F^l;^LM(3wVP>;*% zoI5PJOd8u2$@x4grh~&$`J=NEdeI}e*~~SA>7;rQ6|d$hJ`U=9J&(u5CbZK5;G8)^ z1S8Bl=m>Hhn&*=z1s;b9rq&D35@(-XFA%KK2vqg(R#UwaiuGh zodG2ln4T#vbOl!p9v*2iArp}Rm$WI5kwO&@FP_KiF)eCHV%9y7Ca~tY^L9=~@yVh` z=MW#I08LItcVy~)b!7E!o2h8oIKv;M>k$ zFW4qT9#3lHAo*sjvw;^b+)QM16RD}9+t7Lp!&e;KRp`_Xm^;^y>V^5(PYt4KR66@ai zKqe0;Y?aZC6$??TGhFtw;KSq&wY@OukL$LK8Q2yy0TL@h$#^YDJ|rOX{FFBVoRz7*>*5<-@# z8CkY-Ei4pZ6Ef=yZNfZYa;mzzs;aL1mu11e9|D>Mk@xd-8vK6Hk5TfRBfSMMVV|)K zJhQzk&);}lU&k}pvF5|eEDzHmqtrs)X_xI^IDDIQE&Y?U%x(EBCR#Tw zDUE8E%weKY*`F{qW5>lXKFw3Pzj9tamYP8ByJt05^l3HG!9l3qux0xpcC?G`B28yn zsE6lru;=oyqXko**h3#QV83Lr5V6gU zCMb=VD7vJoFn9L0Y0NUZPn^5hzA%yCpK#(^i%?kwVQcx-2tk}v~9UcfsENd-Uk zF%tW{UBwYUen0#U+gFx85M35qSz1*!8&@EEKcI44N6Eyi`~D~FLwGrnv{lqJ{7M~E z!Sa0|HE4I1rRf#F;pQgZf>sXA^;&SOd= zO$AI_pN;Xs_!2XJ8-Y04CtSMa?ZMJBMmw%XW5#5u>{;hZ2ejqRRMf@vqsFJ$BsNg~ zN}offy|%Ax{b|s!zL$PXWH_rR;Byf&SuL+}SSjxzBpcn=d2c*Uykm!}Qsi+nG~Z}b zd2Jq;1CG8rWgTzR)WcC?63@%W-H6w(0b5IoKFdN2`J_9VD(b8X49O-g(5xC zDsi@HbzDQ1SDqZpe`xk{+flSxsB9GTAZBCYv<1)EP!hNYBb3*f!=KD+V~v+p-!rjt zQOGH@+1!XU24}u={`}YqD54L}0xY{WsaGh!-i+e|HD?AFV&ZPSL&KFFlA3f9)`1 z)m@&D(H+BWah`^X+t-ZhXX}+KOfN8WalFI*MXBxiigOp2tahDg8@c5l>ErB8+ohr1 zCuTFhdfT+6{2YG8`m8-*v$~qk$hGu5W+m&)1FZw=y-RG@o{o3>*rOXS$9Do(?$KrK z)2W`;d2`5x>k)VG_(u{c|M-zZ^1ac$g@UF-470>m3e=8EUYvl$v2p&&t4!Un^uS+( zzGHlOlxF_%pX$6|@S?3ds~cWLet6cry^?rB>G$Bg++>>SFvZdGsrK-iy1LcW)5{V6 zuIItW9H*jm^}7J7%8zHj)|UD4_3hE492r!0e{6p2Rrv#0nY)o=X{3CvTz)9)+2PgJt?bHPqEWO zm>>d0i zO66?wuJfhZg7Dw}2>jOJhPcMluhBr6g9m=&3zZsc*V9vfl_96TKjrGvyrMY^6kuUz z*fQu`g(TtKmq2d=2V?VqPk{HUk;e}vf$h)}M}w&v-TYm!(4nt!rd{xWArr)?TkYyb z7P$f`4QqX1bK`guouA&J=M-fMA8CH!Uw61=pJn&+{yK2Z;W|);{5Qv|x$7No*n2b7w^K`oQ5j@u$=TRBRcB|B0`7HszSfyWN%_ZQ&x& zT#dO4F+=*?AA?JuG}=1ZwYgqq6A6$X~ZF|wBzf&f)2N^Zd6HUWSda}k1 ziSlN%ZmV6U)EDH;rJvBMyL1E8xNZYh3gqIiSLHIK)Hr3WLeZj)dikbwYNoIzWSM{A$tdHq8c+- zq^yI|aOndxoF&L9U2U4ln{%BwfQvH}nZXBQM%)gSp;pqa{Om@_KW*v3I&z&Q8T=!e z-y9;$)yVcAM5OK_y1E6JnYLJSqL=Z%)@#9K3RXD<7Bi0KyR5Yl&i!9x#1lQ&x%3^| zTqF8@ECFG%l=&lBGj+hxy>QJe$@n<3EwSX!+4`F=4&FhMklA5>5G_J#3X!KM6?t+t zA&)Nt9miu8y)nDa1Mgk>Up;q#u)l(~A~<&q(!n~N`bk&<>SCm@yaVb^ycTM7*CBO> z*K1t+jSsWz+FTixn`X9PRq0niRVkZ$EZDpP_OamwX2&)`w+D-tFZ?XAy0-5yv~MoE zp7SOoXDQcqEToQBwbY_}qFx%|99ALadS(3kE>O^i(s%5ZU>wzb^{sE1xnOnl7~C?3b`_KVep*5AQ}^AisHpUEuFy9}MVXc~ zIJkgS=$qClUtqg%bERZWOql{MfKUz5@{D@|wI^vs#=S5)g0#bupBP=hJHj^un!VB1 z?uTcCzmvTqxUcglo)CPKcqYDkpYCK=r(bxVT1Sj!A@DpEqzz=l zG@cquO{YVDSj%F%)A^40S7|6XC@aL@BnL_A{YmHgh;!Q` zwkiJ*TXH3iB<=hRoE_nid8dcxnAtjvQbXqXGrdV}n}&`cf<+0g)UMInQT6^atHi`E zdCy!++%j=z<{h8H{|XVl-DelHRTCP(t6Q>Su`HZ&zJ6`ALfe!xP-g$?G62`=1n*vN z1-G$L!tXYnWLGBpwWaCBVJ6?B`+soujzOAqUE5}tZFjlqD%-Ygqsz8!+qP}nw%uhL zU9O(GpXZ&4n3(wPcw>HK#E$%zx%XOo?Ui{Rr^HI}+WC=csbu~$M9uqV)z0!K{6&wt z{(kqi%0=i*cWNJ)H~2s=$To||EAg?P|0^@&Vt!&=JqF0D%iIae(? z3w6+?Ylr+rICuDd+O`wj(Q+MV5%Ipid7PifA^CQxg!s}&u*Z32HAlcL`7b&_C@w4s zU!*w@uJ=H7ktc%>U6?+jQoAs`NmyR&*yCdL;a$S@nwcyV5~_n-2J|J@;t~$dVpD*+ z-wa+qDvZLrF&@0S7U#-W+=1}Js#wwXFdXO_HgI0jF!agI`yT3Y5CqBFZ@JWmBatBF zCiYajNpY{K1g=9lwOFpzD34(jg#(>^(q_DWr zhi7j5!BBt#Wn47XxtQ@6%lLG8n%YsAAHKIvT^F-%Pi{U0&9b%6>at<6(~-@|ehnVv zPhXAb%{8r?oozj9;Z~=ZT6~ZznMcEpC-zU4n?E5VS^Ay3WN@8(gg}GWPN-{0fR!#B z`wBl`T__yrnd&wl~FGET(9S|v#WZgU{-1o9?VJXV| zpwV-OJJV&mD*4ry5(#6 z1l{-peUQ;w9C9`0%vN3=%JXvmQQJ>bDzESw%`>1$5>6QaGENvX!dfJj=S)u7OGLY( zd{J2A(tjp25YuicfJO3Tkm$SLzC{ka&I zF($N&??1v9qWuL0|EPo-*BhAo7bN^cjy=FPr0SM~`s5cmu(W8>2YtMp03!@}Yq}qI z5E{IKD!Z^oe`&#nJ&JL#P!bxtLJ~Pa?O*IpyHi7@W6Z8vd-gLwqT9-zu)fM|VSZRK zVqRca2IQ^*1fd~vOcGI{U`!CE;WcU^`YV2-xDlJhY(j1`g!~;A(Bsc$MV)Q22hCri z51C75@MN`eQv>r;BlA=KL<|@qk(!uf$9rbSgUaI*+% zi83e7Hi$K$6V7*?8y{7n_;}U^#x!IYq)SOUhYC3HX3k1TU7W*f&2_eqH_=*HpIhZ@ zue+~d#oH1r=&87qb@en=A(I@qmg^>WMTilqeJmx<;+#Hm&z);*Pm5{w#hY>d3Nya; zI_8JS^halPscs+lBGp8Y6{}dEcvZF%p%0yp;sFAw3V;7}Hk$oy_V|?#^VP;i;_yo8 z<^>HsyhyLieQ-||@+7VeFD0jqer(YDg5~=xU zynLb^emg`!UAG%z$DF!S9%ZCsce|LPzdN8`StDfe1@FtVH%R-2ALFB))D$ABY`*$% z@mGtGza*UZ?ji-t;o@_O_^%m|+tog033v~F9#Gf*P$lP%Px1DvNUJjZgI+n8!QX%- zHdv}CVkh9f2p_A{?f(x@T`?oE8)Ls z@K zjyqU%MFd7ra?Shpa10Cb-hfcMat%dHQ;1lUc(o6U=u9QXP@mUrQ^)52mE2>cGBAm8 z&?*PwtQjVKt&G;RkH6Pi{{e(mj|9(H^dnc^XB&Koyf+aIkqCq#q}X!L1=INHfCMv$ z33z8Z0sx4{U-{`|8{K4){Bmf+s{R8!^#Dpcx+N4Vn%5eUD{7H%XES}~8H6WxYw#nQcYRn?WBbvnE;L#JZRC1dv7fA(?M&pB1fek zxWmT}D2Nf`F~(xID6bOqe%V7IcZv1Xxz6+>asuRFmj*9M5b|>94Y;?+8T%%WZngeM z++$jEBAvK{0dQW#hk3quL-s*)bUrY57Q3YdaZ>Ek(a~G!f?bx9 z7k19M;p^}%s+zw6Pw1B;@f z!~T}bNy5hQKU;%Px^uns$qL4!Yt0TA(?=-nlzzebklsvc+2tRfLQCSCfd3t1@rdN& zMuz=++Gc{JOg>exNBjET5*nvd!;i^RRr66H&W8A*ezx(IBPCk6cgj!D%RQyRxhjcK zKif+1)kalx{D&g~l`Zv+0h*Bu=Y*JZgJf>Zd3VLgEtXs#WSzNzl2#s?)MUnP}WUeIaU@)=Whj_^=eKHbvpi8lB*M@N= zXsc*RuwgKgvYglrAVUlAZ>hx3$Tell{6?H)uke;g+-h{rbq3GuJN6JCWjhO93Egm) z=_fnt=HlQb{dAy9zj=|W5lJuQT^O(O*QoD$3Qvb1WKpsyp=)=KO~#@1xXnvyq5)Nna3l*17Py*hXwU8Y_D>;Rx034IK)DlSv6 z8FtXV0WQM`mUWEXD*4JTe+&3`oYtPlI#BD_;vTI#?H1Ln-}{lqZ5ua4PKxOu-I4ok z1~>jrJVsyWyhQpJjtMsQaUE=BK5$@t`&wmU~80> zGWf~;gC2o4!t?Eeg7>#?H-|(|V?qt~PIe!i{P!?v1Nr<~uxpVZwVBGeco5JM^egBI zR(+b3TqOl&w0`h)*ew-8#)`Zb^ai|5(bKeD{f(P`c|h0zKWg!{IEOA@UXo*ME0(r6 zIrSYmk|eynLsB&1r8)jxU$y0V%ManM_miGT3r>Hzk8K|&O5v&v6ppC$LC4zNXM0Db z-kN;o6x)?yi)Z-mICQ<* zb|_L4e}>qM>WiJK%^0wDTv&J9sbsbR19udsF)eLMqs&6Vmb*!N+3oLPa``Jh;F5=p^x9uIBNM;)+r5xX#!~fKyzq|4 zehnad!S6aYdaXlAocNVnVGZjEWCBR)q)D*108ky`im(QJ1%2^qNmv^#X{t4Gf@=4b zmvwidhmOD+8oER1R|b)*236-~q+I8HV?Zop37)BlNR(sNgE_F6aE5k8D`QY06(J9YwYPLNfu;wW~c z>j;9?y*$=v*|E0Kjs6#(4Z3>BW`$f2fvcxJvbs{B(H_`Zs*MH<_DF9rQ%}c!#-*7D z2s_)1g)`hGXGv3_OH2ZmD_xTpNX1D2#tT}5Z@ZM?Xy;;#EStJ+1-N0S^u|PHBF^A_ zSatB#>C9+)b9og z)}T~FzctuH`f9Tc;e-~xbWnpFlWxHBwu6|!wNUVfHM!Xa{n%oNP&g|v{HmxxGwV+i zOG7<>R&;dpgFFFj1j}2G1XXZ>YMcR0u%Tv3b{#I@nT3iy9BU%&Vwr%F z(Y``AZ^26clcuxV0#+2=#pAw<4eFO}R&3s-<3WrK;FLldBi$=?R>4X`V@;mS0vdzn z4TBb8t$`IYsdb4B#+9mSy;5_yOKI!m{UMaOooo=|wNUad&JVo6a&YHV8znT?iq5Mh ze^p0CE#Sl#nM-2NQGsydKx?0tbKg~6b}Sh8cX_Gn zz(Iz~oasOP;;edL=RxtN`*M4{W@0)f1MZKj?w8B1wUQb@Q(J@kW82|BH8cuen?g$u z!zeuJb+a5{VE>p8zagE%NI3bazk_jZ*8kG%MTlc;w@cc9BSJ$X zx2@8<-NeD1Wv9P(*4w)2ThoWY@zK=&X=JM+|Bm`{#VHoL>!NA$h7+>Jc^&$41L_kh zQyR`rE15k?(fSB_I1kp{&sAMDW|fTHh|H0zEMHQR5b&3VQ+ht48C$QdShYnn^CN;q zQk#6#@oLB5O7@YCBITDIZjv&h&K^$_PA5Y|ppMmM_J?d}8%xt#tu?R?jF3ONfPdJ4 zd^Oy}EvEz*99Lw&7Y)3#n@&x0p`MjU{u+3xxhZ>4E@{15`{0O1f*0|w_O4ax> z?r?_ScDy5*&g*iU&~;n(FOr30f9gIr7$HjDt&;uhmm6B2*6O*Ny6!Ttqi-6^)tNBp zVKI|U0C7YTC2wb9b|db{yyYkdry5D$n!Cv5N0C_5$`MkzG47Ri+=jb&+Jkif@`nbrPE zo$Ce{5uPd?1rMAP5ykDvn?}z}Lu^Y;2Z}S3l4jesT??LF3-m32@ZQ|NYv5{Ez@v~^ zmRLV`90Ly!$lox%N}2A*&*AvJl@3A_OfOITR-X1S`U}2%k`A4kL&f;6W8Cb;fo)CzPl`AY03KJ zZHS^E#{*-Ay8aY{(1m`X1LOroeKrH|N$%>qd-`~IdwT^@VuNPGBstvZC3_74vyH2x z>&pj>J%}UdQ$3$x zan@*2SwU;JVAcYY$1IMdTqYQBjwZQ5B>}2UaGQ0~P}VBofhEn;rq0%ybSVHp zNcFz7DwSEg#<#z1cJ5*Who#RBV`GfOpEN^>NMOge;f*k|653OaOyU?UrV^9XNY3fyg1*)=>a%LidCpC;_vpb*fC&|)jip8ic-tSdfvw^bLHxGp01kJ@o^iQx3vNP5=5P4_v?7l5x1$*$l$7YPUOHz}x{L z@qYA^3|+fegL2cg{at~v!LrJn-B6izt)67kvUz$qU^ka@dT-tbl&@~0o;fh^^j?3cF2FVmQ7b1#TK@S%2tQ)$Sj>qy%wQ zrj4CEVbS>Ju`A_}y@cYApMjm2Two8W~IWyaZ^PN~3LySBMi<6Ge8aJl@*TT^C+`(y^G!f1=7z zrc?>lXcbD&NKrB(GJ6M91cQ{b2iikvolpMNTOV7bH0W?CMc&^mmK&aY$pK~Q&ZwE| z7JSc&>BJ}ZR^~rr_jZfRD>~ROERdtVXALS*Yz^vU)2w5xDPxbUq+}-TZN}>f`u-0m zDd>13QLNP7+7PXnPr-F&E2ZzPgu6P+t~VBWdz51ILDfEIHv3m9*MXzvr$@A4=ds6j zLfd-rd>I;a2L}z|0fbHT#P*=K^B=b0dW&zL=9cI#OPz{~CbpZk()w)PY~wdlTj8k4 zv?9#adN;+VaI$1(z?P5$h|6MEsYOrdvGOUPH7-Un+36WXF}v{sRA9#wZ#$;5lz1Fw#It~3o{f;63g zj0<=wqKr#O%3RhIbv}tZZgpaIG}T&D(3%`1Kcc5OxAx zUR+vJTpa5WWg7%Qw(Z)zcH=RL+>iFolk*AGz$fm2P9NhmnKCbd{~TlqkhcQv$JpfuG3(#Qg;=rS z?~w z;=D#(aNV|dQXw{$G&u>^Zk``JG=a{X-UlO zwMplw+8tZ6>Qg01LsxW^{z0oaGQlQjynKNr(I$zha-o^p@L^}y*(zPTe?|R-k$1>g zIChOyOf~gxZ%s^Gw*DUe=K{6Ue4IX^tdMD3@f9=mf$Yp;dp;{nQ*9xxErCB9MPcjd z=|@F{t+w-n&FG?XfEPTndfvH&VoCQ>m!~-NTn5rcVbLZVj!#X;$1QFHN`z$U2*`~< z@tp}W4OirBoALyzA3{O0^e1BeZu64X+8v{yzhyaFeV}_}$=MBy*CWZTba6VR35Ybp zG?9S|LZe(`TH2LfjQI++3GNi_wC0dBd{2blZpP?$vjOCVrT!M%0{oeAg`fm`sg! z)ty0&4*O?E_XUV5sR=}l+YXVLJMe9d0%RA)+ntpf>qhCI!jgg)%*t7nM+PyuWH+^F z-t*JKr#BO^-`cgd_K(WRP-4B-$qigXp%cI6LVA%!du zotYO#Qi|d8D5~sHtD?=Amu3Eux6PVAO6GNFcQ_JZG`QJsEa9=KF^<^Q@eJ zXaM=+2POKyRWaXX&JSA$Q#yS+eM2*2I?I26N_2)+=EgQoj&ybownol|#tw9fw$3(2 zina#kHvbPX%-G?-#Z0!UmKus0>X&R7tb}Md0eaI@fB=ZXs8&8^L@+rrb`p58iq@t+ zBa|U2)7ex|MECETPoPgY-X_atMW^Z-Ue_nK=IxUyM3A6J-oq*0_qQwWKfGkVf8S5# zew^GYp?bz8(xZt$wnK8-vqV^?#q6;h7B*$?ZC-eJ5=Urs&6KkNwxR?_s^RbNWML_f z0cHwA3cHcC`Q-Tk{ha*m#>$YCddrkjE+va(!uZZg+A_&$CTWpIn(AZrjw6b6P6)hgLEyrYfVm?|xW+j^R@E*-g1fM5-$`x@wY^ z4K!4k7xU_B6rC>xWfpNsl-VK<3DlNkJ|f0D%8i!}go(?N;>UZH6r znl&ftTv^J7&!OvvES5=)f9{UsOWBCU7KSOS$un(9*eE;qx3jvct#&6XW3& zmZ}?6=h3}89Y>U!8MD*b?HN2nFnbq~uO-QuoLD$Wb#=bMrKzyxrD=gB{sQZ(*c*7cgO6t0^5Lf=*|&uovrz$zV}SnMU>ctJ>3fBZjpTN$h|R9 z@pfOe_I|ZQx#)X9dzBAtzd0FG^!~KqQMaA0Dmjt!79_g-W2ZWQbY%C4DGv7%JnMnZ;@$ zd%Fl4k$aNv(0UT>u@b2egNyZP){J$=!#({?_-QIKOu3TGtL}}+_8>fL99wj1klZ*d z6>N>Amz`f#KIDk+`*QhY5-U{bo!R!VOW3?URI%<)Zr6i+#-^>`SEZOL%x5rjzCGHA zbqF^nLihTPJ=mqY8zGiLA1`*fI@*I$ zej|OUnDz2g{q2N!B#bI#=TEx4I3R$ZPt6f{OaOm&)>!-Y&1{7{P|eRm4e|8W*BdJ* z7N6TtbDiK2yO57XN*3-#NYWvRk^bLuVCnt>49T2}Su*Bu15rrR*XEpmqJyhGl@B&|AO z@MBgW9@`HXJLG+lLL~EnW{4@zQNkOw7d%WDl^`cN;FjHEUJg_;4Z}cR(%8R3T;k{w zceWTri{J(gCyG_LM78gr_(QLNbng>#O2`@Yt+(m%$$0eE$S@)X6uy0m@f#xRrqEOF z1q7+7t}s9yM9mYOOWA77fwn^8j;`|DVh@yyt$|S&b_YYF<#K)@cH&o=heR&vrV5k5 zzq&kqbOwHKQM5)Dp%8f#>{wCQj|cp9xnEpjD(p3*TH;`d6!8eb^2l) z9T*7*Pn7fpHSez$v{L!<&6$1q`TGF-r~jt^b!O26`t|PBU!Z@oKggmuQX<%oA4jnN zmi_tvSJ_|1#@xi#!CJ}5+|bhf|FZ!UD_j1@tauR}`idy*g?w5e`U3uUGPEHn^p$McmerP7~yIxmha=ImodHBYJc8hI+>Ze;p6iG!W?k} zr@@pwFad{xZ6=D=8u`gOc*QKbfGKkTFQisf+}goADMZr@y99Vv1r@UAgp{JKO-t{b zNL6dUcvU3FZBM3GukavpDqbK`-iqC7=b?v&ojy>M;OUQ>dYWY_A`K)7u*pr4oKl{Q zB=Q=^@V~8no4Bf^B3NkpYbZpX8SG`rjLp8e=Bozqib%X28P#pVXHy)o0yO7Q{s&;hq?=u)uTbQO}54QZ+I zMZ~xK<@}B)cBKB0JyL|%KgP(u9#o-ypIN1X`;YaudqjA4P>76dENC$Vn+~5$2 zL(jrFtgI!y7B)2<#*St4Q*#>8=T!22OXEXxx=0%&?0&}1SpiEl_{DsHtACLp+p@)d zge+m)lg!B$xTG+y20n$-TfiU^Hx*T4b-%C5^<(YP`_M z8U>RglA6#4@Eht7{hH8B9bYx7rfRcbct7WaQ}<}@wx;v2%_Og)m5c$6MEQ-_=I=^< zW6AS-{==iREw=2?FfuXL@ZvC=(|t5SQk_c9DdDlx#2(y!d!&O!md&sCpU~R(pZs<8 zjqlq5|F_Vh|6hfckiM0bfxe;Te`~4W=z4e{0nDHizAZuk9!RjYlVpAz3RL)4>+``@ zM|Ty^ofR~~ZhjDzuzAEdD$~P%xRnf=-`q+W!O>$SPui%LrQ;wGzLx8}Ha&0DuIS@R1>bC>65hg}Nopytw&a!2fv*STMG5W#7+u@_qfEsg?Zy ztG6KNY+_>UAmV1G{|~RyNW{(1*v`q^*5-dIOa&e}K?YPFkzEl`0aR&eoTcH|AzE2M zOkru}AuuDlSm5Mm&4oW$Unz;pX}`?If*;7wa*AY)YjRsG4ExHlWiH6WIJc~MQ+7Up>EtO zAB*f+^~PGJ#Tk=2B_~G#c#@kKgJE$Nt3d#Oc+49<{YB{n19RtyY+G8S9p$TZlxaX{ ze8L77Z>vdC(87JD5qC;UV_L+JJI6V-Ajk7zdq3jP0tbVH$ci)rst0L(ewUKe@L=yB zZQ67ZtAakePhT!ruWYORH8a|3mX*7nh+>HkIuNn3If+wGdp~N2q=zMAMET*A5ON!& z1tMx84qu-;@IM(ds1)dmk7;RSk_XkO0u?X|CzC?o{d%EZ}cSW zzoI8;|82&EY;A0e4gZ;%e_+A?LlaF_(otHJ|E7s9kizBbnZF`~p*7P8iU9Fx#>jF? z>q9;Mh@&sxN4J^8OkyY|3Ntq`Q9p)fa!qd^o$?0bp?t*x(+@#`_CR~2I8BX5&6_rb z^`=Obx_Eu;@>6foq#B*pX>2kdZk>*{X40)#OIa)%eX2N6FAmXhjtW_?Lk3oM)hB%x z=U4wFeIa-1$nr$ps3}f|onD+p*w>jQJB>k+t2s_r;`kbsGofVSOqe|05OZ%vn5-kA zbhH-P$ozbjo?N1WL5~-nW1e56wn_t}qp?}d=C8`eYMrrS zyJkFU#cVkQ5LGAATRpk*C@=2UJlQ(|=9G{!e=l#paJi|wc&q(MBC)T9n`jNUDCMTk!j^CSJ@q%=O0 zevsMQ!TwoKGNnqWM7Z!KxR&N7kx2sAc2BRzaMdabS@x6t%Fq_zlSAO`-OCX~8l0c^ z@=bU3xxFX%^;&?HMGJ^;#t;&i7O_J*hvyt9==s(w_$4OJFS0A)D5T5>li21Hm7BW) zym$@5tyj?CDaY_Bb6`YY-sp0mQ+|>IC}xi!WueZKUXcvo>6wIwFng zu$~Hl%H{U~P04Y@Vsr)vxT6^!W}S&=or#;|7-=-%&q5*hIS|(Mja2)@zB%=ELyK}; zj(R4+#q^xWB|r$=e+DpXldE2hn(y7B8}oE^zYmQ+P~J zEIcL77gZ?PriUlI{L3wp3=S+IKEL9zRh`A3^`6Q1o!=lJSv6Zk_P--%=)0);Kj%Bf ze~TVjV<%Tz2TP&BztbdI`Si}|xELiK(@@JK*Rp6Zp+zXS6Xs*Z4VS?BL3hrg zp?Y(Nz~~{qo98S8!pk)f+h)$ii~ejC$KI%ooqP&C@nR&b#d^i&@&*+p&6kSqoI**x zb$9g|>~W|457046NPe-eOPI(1?l7ZShOJqx$`>@hYR8Qcn$Yq zwPG7!qK2#xy+JiAI3XvC1%0yx5@p{4igFtGkwQSD#;g>MdA|>1eS@{Qv~Lr>{q_z${+Jn zZ77GOH)ksZkzOa$8}&VAF_M5$auaF`fdG&)TJ;EvzfjkVwVMss2dpc;vHi1fi^~*J zG`<(^*uV0&h5l{fiW)l^nkgAOI({eq|1tOh{O6vcvAwggqm!_{lm37A>S5IjM-&y* zzuSOm(zBK%RC1(X#rhJ7jUT|2-g*?O(AMrn^5p?Gi`JdY+dRX}AnG6!cuicfwZ93M2#2)S2i?^GJ#UbDV z8})3BhtgtqSj$_jrAOk40}HY~Zsa-i*1;iRyR7HgPnP+m`SF5R;=zwuKnzBWWGm(# z#-2%z{RW6oVqF3iOC>+1k;0ssj%|{gcN9?RJ4Y8u!5RcsOlazeM~EJg3;pWwRWVe* zxR*krSfhFOESkX^$A^9X6QbfP#a;laq@H}RVSZnehO=Dw<)MM#VjDAyUJRz7A*8?Y zXvd>J#wpZahWRtOOtw-5tHL*|GT#uu2ye4Gn0X{F4m|ZpbJkypibxE3reXJB!T5UxYSWLS`_+TNg z+|IGGNoz@?=o!X5Gh!zXZJo>x5UGwV{&9p+_&U$ z9wi02FG*|rlGc)`jWW+NVq=(|3QJU6vGc>8hAd0mfe!rH2q8k8xL`b6lFxRLI`8-o zB14zu)WUfh@_8If!>#lehbrqAn2jVW;s4FQI z1}227M6>XlG5L6%)*cgCiwH`HjLEktK>gU8} z5fI&aorj4Q1R)NY6jREgy20+He{kDyjQ7~6 z4=QqRo81qXuwU0i9vTAZmItS87|$RfsIwtb+z5$;cd%0-Lx!!G$g!NGac*0xRe<$G zb*lWX1k4@O5Vqhw(oVOpWFxhJ3gH%?4EtW3S*WxaEbz%_q2q}_(LRGM0wg<}q6{bF zvTogDgXXl{N((l8d3!)$7TM>_mwjjZ5j z#;o7pcJqhWuB@LD&mwG7E)UtEdRze^i*>e+oU%l%^AxOiQa?rU2I=pyGA2VA0{0-% z6Xg5s(3#XUyLt%OwYq615uvrR8#7|QoR7#IG07WCgZG_h_Bz^n-7!VhwNGLW&VSlB zOV2;GAgyLmE4+(|Ortm=eQ~3pN$;sQMSjS}5X@e5Wz*pX4_Fk_B6=nFB z$j~CcaSL0s$41;ryb}w>yzT=^<)%H)p43qq`7&z@y?;ZFN%L55xFS$Aa0V#zFQGH% zG#dk5Nk`mbHhFf@G^v3EOL{bQD6hbILTvli{!vncak8*l?V%^m>%hkL2tFRHqMlT%{sFKfW1{={ve&YQxwf~rPht{IS$(v2K`tuRaX1aXvp1@R`ZQeEjPiB8tmh;rlSz#5U$soshH4e(+KPvUbSU&hVYID=fk~UxY+AW zz0yFVsXyVqK!TOh^QXpkq^Tw@>QyG=hB!s`t5Qy6!dA^<#6k=yYAv`E$Q$^p@nzs( zuVPxK{9zv2v${fuJTBQ7cyq8OWDxdWhiY^d4dHNe=Ixbhwx#yF;0xo*>c1{UOvQ2D z#jA2A4ogHC*VE>(#jB!n#wFefEqv;Fv-(|pYR(*Ok!!X55BkFFj+xfPe0lQnVqvz<@^40)w5 zXKUzj>}BpWXK(7!*^mv>jQOiZzx0?3jLRtkFq2iGCe*rr=?ud5%LTkbg|0~mBPQA# zw$!%D{~)*Vg)~8QmxnkLYlDd;VH07W)B!~ZrSR^nv>8DkO&n|H^5+^;My3t6T!K&m z8y7Y63=Uce8iciVJND~i-Q#+gei>US4_hycI^>YP3-uYBh9)hF=C7< z9;)BoB)A_CwmXj`y_UT`3k9^o7=YU>K~@gUgX@_ya2DTIW`4cnKhKjct8NMKh%qf0 z@I(oJz{n?T^<_jMe3H=inlgtb);<{!d1kW@0kGnY3I{jGC`4;i3?Xr(Q#MeXa@}_JGCk*7^>IPRT|0rt(IVU#9!E>;tsFl+%5{Aw)?Q z;Q!n+r~7kC$4%zK8wy2DHVC+?e~8hyzz;f{F(E$JPQywcfir=$$0YHgjB(AzLFNR9 zp_l9HITS5^&59nY8$}4;;UG`CcBrs*A)~3v(cPal5Y~p3Ip3FQIgeZoOMJ2e` zmVXGaTX=?+MU>_MtJQRd-pkWrKb@XB)c}xsaONeS-u64bLEHyZaM-jbadFdr?-}iOQDF@_truMIDE2ij_qhm5{h0KK$fvAvGJJA(}V6%HuvpHMy$5RwlBy2jhs&ZL4!ITG zCKyWDD;%zOoPWyL{i-(^DCTV7!9{&8OP8R0jm{JI{Ic~86dO4+l9R%8d$g+Imghjd z@`t`kGtya2i&?fLB9xip=(%wK{MuuSvXFWA5$XjK0GxsWc2*z4x}N_E+nT0aN%oli zS~_>Z&=E9v-Al_*-NIs$d*r+?9{PDLIKtd7L6*t69r*mdd=im8AW_#<=$Tl0Fa=)uZr(Ln&BA=^LP zL7-c*gji}Lx^+6OhN-B#2PO)UDj{N?mP)m3^uT1-Oph+|!RLF6Q63jiyQ6e-3e@JR zDLhEJp@YQyS#%cbnMG<#RtX$RPMaS&odBcs1n_P467`%vl4^wS*hFeEe#^~U@4rJ1 zQh0!D$7mj7zM$4jnDjBF) z0udkghpo`6cyd^8s1$)>Pu6VH16%N1m;-b(2-r%_XPymH+zH*Gu(vLFZP1jQ(mbxP zClKJ8!6s! zym?7<32kJ;S0l6tqgT`+lxD<$B_U$?Mkh2Baq1=@4O7?*rwhW)Ohc+OuHJx@CUzJP zUQaZ>MnOf_#2gJ=+te%DB%N1 z3)1HaRz&CFpz&Pdl}yePNGTAyIUW%6VNJR{+Q(}4DPuv<&@4@XXeN`RoG;L*d#k-a zyfZ&~s_C+2Z!S}r7F5xXFK-9>%=fQ;aODBQ)-|>Ju9_?a2GiSB0s<^lV-s|Sb?esp zrD9aH%Qn!~wA#DoHceRo%FZ}{9^zb~uEL64kkol#bajZbTJy&uPMAhMb+TD^!7>HJsp9t(uK5hZ*JHB!iF}>DpAofdxQT?cG%s zn+SpsGbIp-^N;^zD(RnQo|EZp=AUe(OF)-%+Fc(5GQ+RXb1+(Hh!jav?=u3Qk#P=X z={I#VCT-K*l|`(|1cvym-{Tr?Vxb>QXh}vd(C|*UuW%$kl+iX;Gq((wZ}g9q4&cKU z&2~jBE{@@edP;{4q^;#XA*aGkzl8Fr#`;|;9w!5}0n&hMSw?n4sCV1v>^W+bb$o-O z5r!8pEh#gzQgC6o&M7Zy+lly8vj~QrpHpqf`KQ#p`o;WDzIum;Ke9FVDk8P~ragQ3 zyktOtxRQigI=8!d<8Ia?rxrvqt_}G zBcYe{q-HI_R~wKTn21|8K-7Jr>(OupLp=+KuCa?+&|1K&E*L9k1XPuc2)>T?>KvG; z7{6mdeIiC@3BIgL7F-@+pf$oARIujmuD_ffJJ17`8hZz7uHm2@dFJJ90*=Joi|EkH zH_8omJoguTM-45v|vkkVU6UZTND@;N{hxtQcP>rp=C2=k6zOs6Dd(O zDl|#WFFI_vum@f0T6fHWL6-k!C1RIF0oQBVPL5M+Vs|E+Xk_Wi(8X;0D91d?!O4sE zs||-zFBEl431jgTUS%?cWV0#OH8-wdnGl|`XtX6!l|n3M7B(~Aw;U10D5(@#ey%Gd z$eQZ^5iub|6oPn;`g=i6PtT4Xa>pzLlQ7jDr_De19aO^%tLq`e8Na?wSE&Xx+?=*> z4z81YY0?D~&42!DKE`{cMT#~gSv7J@2V#p}ndQfQ;J&cM>=qNG08W*qM z55?u3{>sY5z{(L;>C6X^!^L3q{zMY6MIOZX*OS;`*v5h;13%%3gTXd$&$ZRwAwjp$ z%!eIbi7Rs($TU{EP8kz}8we5;jKCcO4R=c-kIuJ@?AEI{U!VUVb$GN?hvv^UW3 z{8oI>P?1-z#&eKi8J(ek0S<3~Zd6(Hv*t3aoR|dFSgtssw^d8&wpSY|E0FQKd_1MX z4w|hhnIs3F0C-^TQDYj94;QB3B=cN>wG5Rhg+;Yh=wa#(dvr4nx4;(j&P}(D4^n z^^=r$NhR@}sw|XiN>A7@SG6xWHOfoER!I_7k74-^t2C9e#{SZ+p79)3N&VG+UupCLxC5y>KjVeH?;$1Rs;wBvCD4Q#Ar_Pg(3>yl^K* z1h`Yyn@NPQG-V^JJ3m4ZxMQ*6RIxftGt7jY6Av|x3BkdU#|5xlbeK17tMs(P2b}iP z%)~~EyJ7m%igybEnnkx2)^PfFz=OJ~;Ll^tKvuqpWCe|&*kUY2A@voR(b6K`nL>42 zutC+~g$+B5C>L==n9N#r-|zRwVSkuwV_DE=GtJ-M<%%FBm@#8nTcuVm(LbB^hj zCW`TJj8B?k1K16AHgibpBkBUj+RrAM2jqG|?A=6N)Xi4PZ%73i>;!0K5XQ|h5bz{l zWcC{v(~d0zW!yJ-A){C$f3iYT%z`h-s1%7rr$K`K7sE8EDz-1*@XItqpjq;LsH`Fu zq>GdeUPMt$>mCeRuF3c@P-G+Dw?`8 zdQ5~>q~?LyGZHwD?y%jm0Z0Tg>0YM_C9t)Kr;aaX46gZl?JqhXevA5JNPX%Ewfn%o zL!ny0%mKx5B@xA1M|d4(9dnYjE#cNTsUPT+%1T0A$UDrMMtOU^QN-E-HAu=gn@)dk zsiiZYtS=8245dU9O{*^&Cx-CuRPPzOkKCw?^yq@V1TH#g?gnNj5bp>=AEStW82qx% ziJU~rnGx^LSFFG*hYR!o#v1+6NUP4Yj+Z8b_h)WEnm#G?80VMlF2n%uR-6uu`c<_+D*leH0P1)KKfn~iIW7Y=8Hnh^F z>rGe=kGow0a7(Tsi+)z zg_ZQ5P!F9Z_S67#7Lw1%M{GK;m*Z2ON*3^VGpX5MmNyfgVOhD+tG_M6hKYnIPlPJS zJ&9o>K_GcS3@ph!lofVi4qKiFG4$LBIs9J6sFu86@Hgc}6SVkwM8nx7QzbKjJ zSd7jjkx}i~EMT?JX5y}nNu6WwP$^AxZJOeG<($ms*2I+(cGZlK*T%LyVs#$cGy%2| z-?P#x6q^7rZn(QLTVFqVy{q<5F5Pmw;vWiNL5&IUS7@W%Xfa8S(k9NUKLJikicoag zb2$o5l{hOnf6Prd%gd=40<~;_xjo)%@lO=FprI%*uWS#rK4!~0mV{(D7dtHu6P?cN^ayecMq7@2h?rIOqb@K|E1f$6{U2(qA zDz?*UyiLATFd*ihiMyqAn?=~aL!dINUX`%rew;!oBrjEoK#b}i!`_5l%y zc%Kz+Lqv#Vvib+y%5WB+avd0*B4c||?;Y|Hnqtv56`v*2<_{I?;R@JsX8A&^_d*L1 zMK{Y@4Fpa*z78GjpQyjBf~#g@pdr0a4%p}v=XCk@8B0`dWvWjK!mCCa=E^}sb#hBN zbC~k$6h*J&4Xn;&2CNj5A~06%u#xA&wH6{t5fjcU1lMHdR_W1?b*&HaY}6=riUE1H zM~PJWNO3d5;Kk}GQ++!LBdaVqm|1>jtzIp@)(ypk15SSHH-F4nSRNzb8vKOMhj7s! zy1*DMDdrIs3Bvao&qTmd?13JWu{Cpq$;ZSkZB&Rk(LwROlboVvOLd@yQt}O@4yJI2 z2b!l!zA;voza*2o0;H93CL|TT;WfGNVhtD7n~HPo-w~V3A_$e29w?jRZrN}uBggGJ zj#;pew^No(4fz#Q&&}JSFOyQ6T%n|5eq(zQZ@JcnGuEF%@CaZ8%SVSmI%-#oT}Nh@ zR}k@Ir6r|4osUi*c+%N5m7f)9BgDEJ(YCU7-4<{664tf9YHK5C%A6YOB2eb%Nb`-C zJT`u38y5N4Q>(U*oI<7Q+nWPSi3zO=OfW%%rlDK2W!hZ&8ki_+dFllQT*Ff{>{1VzK$5Y~rtTt8L(w-OBQzL7Ulr&T zx?jnVe<5qd?B#SH+WO7AZX5fU@mIT-_tYIMNf`k%Hjj_nUi9&}`4tZ9WQq0Fk_ce} z=$eL-Xqojj%wv4@uC5@mn@{&}=iN8lxA~}+Q$u>80Hn(o;c^1OQ1ns9nv)}yaNNao zQp8nY|0BELK%cNy!fB};pn2IaL8D8e8wfvu^eMH=x>sH39xaMXe( zw{J>kvbx+f5^!Lo=epga%bP1m@&+@FGW>AN#QP)WsG3{67f`JGxgH8C&2a!1`RUGp zZyx=0BautGg87Re>CPDvbbKDF@Si4bY|~1cuQ)m{b&|z!^yDY!V}w`C{omf~!n%2( z3j4l;GvZpaXvZ>dxeL4$zGn2tL4T!)-jb3)5_4+=s|(JfmEth=9xCyjsb%*06(=!r zJeocmoTADgoDkW{dO<^tUyQ;HM8N8F=XyGWvDHuxt5C*Rq$;uZD4V%TE;A4eGWPK=xNQ)9wX; zEV>696etZYZ^uy`aBvnRXd=BLGwZJVCU8yb=K3{eXaA09K&gU~W4BZ~;5@dRc*d z$^m$xZx^6nuzG!sdS`xpNCEkv?3x1UlHbbV=~{LBLg;NlyOjj^L0{;?yddwZv|T3+Kd1uuGy(L0+*&?$uAtB8!oIKo`2g*1 zK)*!$?HKjif_$I=`B3h*pxje{CHtr5J5h~dtuRTOMdyT`|$$3 zG=O}t_vWzf(*F9&2k-^IO@V%)yd~bx`LlPka$AU-^RwM4%NAj>mynFR7-kY2YGmjg zYY|CUO{DFvWAIDy3yR6zJ}>ITEiXRE4XWhx4qw{VZakGW)PF8Qd)U{W&*zS!W-h+M}glF|gHLAf()qX5I z#sV~8n9^6b1G)2Nb#GPrb1-Ob1$rs>EazxKyYp^Wy1?OF5PlTyAXn}9^ zT~dG#akWfXk9b%QvM;Id-Lu{^?x1T^<@RrUy8H=N=NcX=86JY=D4X-^;g-57*Koxh z;`ZCRzgq_0JE%gcJNowP)&^6b23ud(Hs?H_IQGLpRNF=IV-0wE{#6}(+vIq=Tz?wC zg}6{Sd9V<@+DvLC3x}QupZSN#4GLaF&3;PzGPqOmL`}y z>XzcGJH>?im7JPP@7#h7;$6`OuewCpxaM4{dye1}#h%==nO$u_<+x%>7mG}HH4MYI ztRfN^XR*ZdIc9~h<_+lEo8B_dZMA6+!z`|vp+m2sL%=QJU)`QV!DjtK!hqS1^q4bi z&ymozHPHu}EQT&K`g0pCM>=)p;byFvxcnNtC?$q9I(Ld_Q$74^-!MzxrdDj4_(M7S z?2>M1hC9iRFqR%2bl<#mp5aVbL&!64F^fR4pDD>aAEzk>bof5S?jJYI+FDHJnrqd_ zvrAn7M7BIsZ`WpV8?sQyPT{&?x)PZ^5!?%LNDy}~HXH=ao75_swDWKRzR$#=L(7B) zn$Ja|gDzfI-B7+Tkt3VbI2|flK0;ddEvt1Zmx;R7MhQQ34UWEVuoVz1d1TADOBVca z?FgYJr4J2+znE|7L_wz&k96E*(}mIzT0-A$h{rWX4^-rse z6#t};`Oo^IvXi;he^(cq)WF>^N1VSxf4A;BlmQ_S_azgL<`ad5=1wF^Y2%ZZn@kF# z5V0p7luGJ}SA$*8M+RGsIm?_>W)y}yvYBTLvnO&kC&(2hv56vfNH1tfJ2th|u#`A1 zD_fI)UjpKR0}@ryzVi5_W~H&(Zr}B=-rO~$;Q0LRm9gg=!q}|XcXsQF_;d>lU@ZsR z-Nx7qWnJ2xdf|M1c!v1m7iQkh-^aaEd3EdwXd!p&h!Ad7?c)@1EBW9e_1!MYN4cpc znRqUBquu`bShEX6!4n3mRM{VRf0AdR^PC6AQ@KlsAGNZ}MRHh_fX`LAD*%S8d|L;H z6K81)zITA{B``#KM~?g*Bun`s1s1DvK>yJY;oE0wd0X?6nfSd!lrs~03+#RwsbBuG zgy99P3%iF&(H;JsnD8CXv=i^)t2yL)t4+T1jO3*|1bZv!KimFGsn-TI)^ zxq*YhkjV|G>?u9r^qfG_{MyQwJ0OD&7}+5`aXJ+PgElSijc4r^n&9!)dY$T!tqIjS zU?QSdFrtRLkT4+PC4`GLcQDpyu4Y5By%#;A#hA5c97n%3hGwmD-kQy#*lyWaq!1G~ zhGtaHxa=*#TQ$;9810&Y?i$N0d$BCXwZ~D++-T}Z4=y~)VVvN;-)z>DmAj3x#5-a6kF6eiWk~f_bwq z+bUP!g>aYO|Is?)i9LuqZnB$qB47LmbBk&7Y7X zkuZ&yO;C{~Lc-m1pX`w6ug`hlfYyKwGf|vYIpF|}+iNf`{w2d<4RvHd$ejZ8+a_u%M8O?zjE`d<*ID8S#o7(Szqc6J zAzznFjzwBAiQmJ1{!gwFB>ohb)YsW#>cO~jpvgLO=0FU+8Cy(Tdh#~Q$oOH4g30{C znYrkIA@K`vg8ApAx_{BaY!+DEB z)M}=dDNk2F64+G{&So z(czHf6;?7AfXA0sf>h4^j3}gNe_4OE1oD4!pO{c6h<VPHXVNOWCY94XxL5d0J=p zK1AddChW=%he<1et~gZ3pvqZli8?}PBd}n~+k=fLT^b~)ORZyt^)T+I{beH`(m-AC z`cV^Bl&(f|j#MXrNI66yEW|V$grO6aVzy7gHC<1Wf}_|S-wk@*DT$~Wx%BAZsdJ7q zfZeQ^Hl)0tPHX@j+9Y{PAuTk-A*@vq{*<4cw^JAfoxV!OVopH9Vwum+WRWk<#K>-L z5GltDpAuHBE9RRQR+YX=(yUmK))wjRWRVxCuHkAud_1qdM1-3btRhkAC1K3A93u># zdW7endc*xU#Vtw#nbO#D;*a_tUtuec_~{E_3}dyKM~@?5&vwL0St{FlE*9?3H+r(N zDXEjwRL_vptPYgBD5*F6fv!Hv3D#t#Vxf=}Q5a9+k7D;2siY_6x7AerqTlJLP7_M_ zs1DY?WoicjY|ce&_0Q4RXHt*OxHnvDbIThm8%uM`-t}EIH)i{%am@pyh*_dBt~lbE zmls#prhIY*%}(u~Q9Jm|$@^-}73$Li!6=gH^QH(4)G6Nf%eNoP#MoRJmMKU|jEp0d zUJb*klr|S<_Z!ZkuVg9#1Jn)tckgI%aM42uZd2yD!CO zI(n;ArH{&kF#gsLI6lSIrVdT6T_3)`qR(M9P&q+IAZ^rRl%1Vio&Vw>uhRGM4RL{o zyewQOG1MR3M~0+Pr?eJ%O)$suSMy!-D!ZnrDioUssw7?0+~vdtJE@RIn@~#$3 zTUca-c`G}VVELpx;puSyYXiD*@tcyY8{qP%)g*@N&+NFMkNMXS`j?ANecHY%7;?Sr z(K!FKiyabHAoK}7&Y>tU$7_Yd?{qjmMwmOvhwxj}R)0fg&kfUf0fy59GV=;d3{p9I z|8Y>Zvd2^<_t0h!D3uqXR`@Ny=cPcM>u2QDiLL=G+xsB4eeL*L+A=HB8eygVOW@yc zGlZ)Pbm0{K+sEQ$fY0FrA7J2KfJ;^WV!QHnv2N!<~^^Uu~2#JG{Qxu^v}}Auru}Mr^u_T&4pV=E_Txoc2<+tUdg)SI39V2$ww%_^t5R3R7l0 zUe?96v`4y7-aJ`d_B{5hll0aCk^brjF@l2H!P38IdT)gmd8eAqFW3q>a}8ENe9adAc$#;B&94Gm3mRg%MU#JL5PD zr*o)1o|wgWw`KHb&`Fen>pLaC=SG*(-YzUFX!}4&?LVHZr(H{9$BU715wM|Ik&YwS z1oh6%E$y)CiQ70VrcA^6I}N*go~>wGq#eFdHw;CI+$RxYQLz_9q9G9B@<@YIM?;QP zf)Ce_PDxz6)u-PR?C-v@QoJ&t;M0-Y5EI(FCoR?Gr!&m(1$=9iap}FXs+}xMo~!{d zya&8wPVSaBxK6v{Z*1K@-w*hI6;Q1c z90X@SHseIxe=49j{;7ca|1%f}IGbA;{lAonAvH)ZEMxfZnd_~qE#n0ea&ynbQxdZ0kB1zt)S*4|D73{ou zGyv!>%$pGg2YTBKDIwt8t_`=ZGV zyKlkDDTJ93egS+9vnka)RfMQhf{{7k95(c6b^H%X?1gVHcn~FvXub#@ag$BIGyUgB5Dx1BvZWK_Y}42=#KP_(wP~Y{BAC^@$M5X3 zg4@+lb1~dBw3Xx__{s*<&_+8`;RbZZ{;cGP4?d#y4)xd(bz6vEmIc;Uqh=PlOLQFs z;0qkNyky6pzf;zX2O%lJkITIxUW2{8kTYP<2r}M_#m6i=ml@b_(Ok*%c&4W$^D=PEQ$;3=-OiWRi)u8 zd^7kmh-ECy@=Oj0Lnsl{n;fbnr6(X=R4~Slffl<9$uN?Q_+I98{ zHpWa>XGB=Cj}W4Ji22V1uIf*q99QmOi4Ow4VF1|c|fQzMg ziHj(?GX&<9zf6=mh0GzS2fghWvIu#2N0LBJ%?Hfu#aS}2B)}LMt==Pfc z>zR1Xj#4UszT$lHE89`p0ABueGis0RirT7X;LHbZ1(!Eth z_8r&(zVt11L;pS`da9leiSXS+#=qVPLMIHd2pekL>aU{E8G3-wQM|+LoQ6@n)3tvw zb|bX*ruePgNnVU1Lj$LbHHZlT1Ao3PEL83W8LEucr|&XoRPbkJ(i}Xt)C|7bC$bLK5v=71ADlbjGhTm6NfgDA`g}{_dqY#uJ7oxu+nHds>7j zQF^E|)2EToFBIZueZOIYe(B39p53|2#)7{?Cq>p8RC6S(W)I4+&0zy-MM(k#l!MI%~gdX+wgnXp^JR@SK+CXxUPYpz|$EXx7)0(W{OdFMl4v89o$qft&^ zXSQ!C=b*uU6Jl=5>0-0GLDex-+cua5b}8Dg93i(^27ZyuoRTmPE;PMV0sUYC9jSSj zNs-CtZzdG{1_NMKy90RM=W1S&?<_Lzk)o~IL79NzLY*a6#Yl2?&X|Um;g*N&;-<5{?!ERmU$8g*fCncil-JskHkcszPjshbxsCMKof zWqiTy@;!Mm*ahRbHS>eYp=n7lw=8;@5icY3O{tIe+5EorvM=boq6tM@2Zys`*0e6T z4T;7eGf^f(k;Np#W%-CRuj2Z2;S#ni`2-qN0q+j!+M>ozrazdf6(LrO3=@_kGr_Tg zNNCX2;j6GAHp}!G8~9Tya4)!cV**}gUuF>U$B4F3gl;s~oSX)eYZ0GJ%&B6U>#Z)~ z^20buvB4jAU^xYac335bUu8nuplwFHSk^#x*MX7Z!Q#(6ZW37UyInK!ZT>kU14A>a zdwrCtAuGEF#g%Y11*sYJ(OirR$x+XF=(S}2epH_s32!w9T!8ZCAfKdAc$QFpZRo!` z(|-R5@&(z_JWCL;ntvs(<}3b^_<7a^M-!+g(j`n5P@72yv}e1g?MO=g?N`=VhHYxH zqOHFfY4nl05tb3(&>4-vj%t8??HndFk$jJ14AMfc0?f4n$Q<(lWZxx5HHixlxX%r# zr?LZXjzDTHT8&_V+*Gg{V28Tan$T3xr-|*x-LST+KC&Z>M7A;>y2l}l;bA-UFfoI3 z|4f~WmHtDjDNDAWgDvS!uyO9o@`@E-408|y4{Thn1bA$2rOF+-Ae->)QIie7Dp-5{ zGNIi2=BFAJTg}WnnayAKRY@LN-qlFYS);pV+2>s;OM_HR1KVf!;0y1F8O|VL1P$-$ z&r*wqqgGHk?jS|?Mp*nDQL3u7z`x)u9F@`Ab(j@{^2rVX6GSQ2+=fWQI&4R8-2iOp{iXeMB~SfJBP%{`gC}+UTn7NLn;uR*B_o{J@?kK`z4%^_JRSqBp3ErA5oLhM{8D-rItv?kG!eLO~_?sZai{c1r)Gea8ZK`$IR z3>+*~nj z(At8MXCxe1HU%2(k>{tsviM~cfVgET&yY2QYvwULvX&(rM`@|^8;U42NUL(A=PlNW ztcy*?a;Fr+nkD2d5@<>s3oFjJ%2JvopJ!pt%;$dync5`lG#zAQvZUJCqSy}X&g0CB z#4B<5HMv>$>WkF2g*a_VP?VNi(OR4SYpZ=tA_Szq50+qj`WKyMN3^UPyXwE$ecelu zVg*gdBU8qrVSY9bqu!S=u1YAEGo11$WY1ioA}6RIe$a33gwf7S1qUs})Yl_D87L{V zoSRCFGA*QpHyHOnDU6&QNL0+82G`DY7-LS2rBj3;pehS|+6XHkA3S-;j3ysWwfZ!e zTt=2Xizsm#Qf%KR*PctPCc8midvlo_$CX+mf;MD0RPc#ude=kP)MYuVt75(v}t1?T~e z@xq<+1C4pNCsDoe&CuNLl@cwqTge(fg0nD7Ge>(@2LKjqg7|CC?< zug-HJV-tO6D<^4VCw-$I=dQBd&%3b$k+{tdtk%@w$L9P0`FX1nc5D#%k%oKxsXKO2 znj2NBa+?i`B3*<%Lw#xRNQlCu8@23Mtx9T*x2hT<-w1SGPKZ14q&sf`yvPpHg3Z$1 z_yg7sC)pcLKDyIr({g&czkk{JePS`Jjw!Te1;#{-UzgTa98||p2 zA_y_fl7qqa8QzMs8~!kw#9nz8f)kZd9lQ}_w;?e;+UW!-oY!EPBUil{Okdx z!N^q%iOivc*Pg%%gs=PHFUvV3bL!ADQdDyOT3mcBMbi{0hz?T}mX89D-ae64^7)J8>2Vc1wlHGJkvGU1Nr?d`^sr!04jl4hZsJ7b8X8c@8LNiClINhzNEv$05~o>}#3VH2V%M4K{crtgcwc(L&>eID+l z$JZ>hR?Y%+;;|Euv9N4CX6w)Xr#8fm)<|Ys`Mwpaf;{>)`w&yQigXh%(Eo}?Ad*d9 zm>)a&kYd`Lp3@cdPseqAKP(cxLd z;dONMeS=>eKJaR;@F=jRdjMRC@KMx?lTr`c?+;!8YWipdQ1ozU>WFKad24mOUhNIW z1Z8;6#%T-0q-9Ry!^#YA)|1Nm(nA+(b^5T)G|09JTeS(PH_WQnwvttA@$8l~sOa2c zdTZv_fWX7l6wGNt*Rtr8s9<1jW`th;I3IuWb{a!>A^&v>w7rJ{vw!~J_Rs5oMnU{k z!~Zi`QQyeg+=dqD-(-oO@BR8Yq5ppT&%?3(9RD9djsF==@?Y>q{(p`9U&I6h!+%cc zl&Yp8mN3#+dKVNYls_CkUPO5Q8l;JzUX(zqU=S4?5J=$4_8JT)9cM#Y8nF(JSN(X; zAKl#wm9b)p3aXq>!EUwW5>M0s%HJ#(flBlXTaMGuS(-W5pPw~3zQA-L3V>Ou$+76K zsY~`ajuXxj_5g$2kH_x75iD3ly3btEOOho|0IkJlDzE46*I%_CX-HAw5( zm~>Lc+`b!!#5Tx5Z4CD-vL}-gllwOE}=K}3wzhiZ8&eu9o*fU zWW&4i8N(S+Z;nB%!uH|QanMlM>Kn)vM+P!4m|Q2b5~|A$t&Xwp&6z7G1q|3whR~iI z91^c)#C)bnsK{?U{Uf<2z%!giqY(DB#^dqtv4zqssCpqT6R2EBu0sR$U;-f4%~qTc z92r^?S!nz{6u6m*0T|nQ(9vNCdD=)i>`F0I^qG`)tT%A>a`{?u-z%|{tsKp1T5xZh z5U`C(-5l;)=M65)V{(a5-*9@(;4`py>nnmbSJk)i6v!65jY>}*aT_rf09|8*>N{jF z+l1uhn-W2wiXqpAMND3!b`MhK9_QBHI*-mZmzoB1DqK%T4$AlQI%;;*Bao#eszPeF z_ZZihtNo%N9(Hqls5EG909zm)cXc7MXf~gs!3BGYKskGk;ZiPAtQp8a>}nwQxlUYk zwb20}8@(_t&}{L=U@LqG<{@*#tV~V*B1y+)-xJ9NI*3zNCeSzo(I-{EK^piSLLy%e z0;g`L%0frTtKM7Vc_Mj^+Ac=}uQ$H??ucFQloBxgS=#G zla<(`Y}#VWHR2VTkX&lF-m&8Z@lw|GgF?>9;@O*465XgC$tS52irenhnevJ0Sugzv z;|3IirgmhErC~p*vOnNm6qDDiVg+GbJfVO+n2_e}L;~l1a;JOQMFv-sW&3YOB`@k0 z!b-U@7}j=p`*53_lQRm;v&%$iRT z-i?Ltjow1@X?YXgb);cmVmX?0d^2q1eXGNi=hamHZ{fELxgrSJWpfp7(M*SCa5aSa zBDT8`^SRY(1=$6(3gri=gV!a#0+PUYq_aMy1slpv+{$x;?J!1kg{RwtOBlPZM1*4u zX*;v+3`+d_^zGnm0)kxu%@9#jH*@lu<~6&U#gEkaqaKCMBH;7~_)r5Qe((g=m*n@7 z%BzC+P*PBc=24v(ePnYw1xvp*z6Sk5>R8e{gD;pXOwJk_wNpCL%?B3z&hI1dkP(Jg zL^~H@!<{;#G4-+*keXdB-3FLD-P(HsV&2S@6AVj72QAs)qbSS3Hw#^n5>oSn{1D&; zai?^mCU&TndeDyJ2voQGNEGINFU=G2gzf*^->rBzK9cY=jo?H7(|z9Yh^$o$X{zOdO4!92JZmfAXCF+yl4Nz*R9z7kZ{UHE52YnHjj+E;#M1 zG@f-oqdq=%r}2v!;8F0DjGgV#-ArY?Uw>Y|T`w4ZXL};`F1@J2(MKs4AcR{G^$j#~ zpo0t;!Er=c7};g~Zh*k9{hdUOuNhv3S8lJ>nNvExPXYn%}POBnxZZ!P6pHC($8(}B9xn@1R_Q z(fj^DzLcu?g&aM;V3$bKAJWfq`~mJ6wkPsEuA?U^b6;XX-MhNF_J$d9$S4Fi@9nQ` zMDT3;UkSjZuS{7g*Zz}s!s1fIn?0vAS-7^FXU zOdLj#+f-6*Pu+!3efWfyBriP5NCj7vxK7vszyrsE>RT!cUO!5wa((S~o7D(KOk%G; zdG)U2v&CW*1JM%{RfjA?Z-efC6c92g4pPg@{yH51hPFy!uZJ3Wq2b2e%A>>X8X_fb zh3IQGml=&NAd1YFSM>(sa|sQM2(~H@lirT4Q+QDX$x5;jA29I{?lmw>@9IZ{08);w zhEp164nYkp3l}_@W8kVX^&389N}^xiN5PAyiEzY|1eT&li=q(F?JsgsI%H;W8QgEw zYY|C^9@Y*KQsUss*Ql|GDrGg3jfGhY4Yy(28vJ-F9uN-3#uJwMyXGV zr>5Moa}n&xqo3IOZ>kBDj=gYo_s-S|UC=mYHqKpf4Y8t(D7vaF#cvw5GMOUutC@v~ zB}CEgOCq^TSBsDCxtqk@8G8v2tKR*Is@c1M;*3d7#Am=6V6`CT!V$=^dulQE0^Kn# z)pWY_8A`Xy^knWv?SCex@qz1yHU0qOO}<0?P!j9HJ1~7=A2@P|U@mwI# zou`dsmac~;=8!c4=EpJqB%q|_cfbWs)E#{(vYW0}ZWd+m3GRYg(N(IDSZfG#u)9Q) zot@Xn0c@_-P@^T{>Z?83cSxr&R9c*tpkaft2b4pd;`K8l*ZETlBMofKr8*C#2@$rX z44=$282G~MBbb-y+uNprf+TE9F6P=!TGmRD79}#|Yzc6nq$0~!e)&LRZ@>3OEqLM} z+|oF0Hi2--4MMCFkST@i9c>LK8A3RRoLBiWH^RjZe-~_|W5H#yjzEJxFnub)&it6#V%455rKr7B>`dz-@=npT@w zkAs(=qAK#Ozq+`v8M(XzbkMwOo7T>TcoT_0tHh>xtHoZsmsg7RxALQKUctm=Cv%eYq72up^vAbaYjWgB&_lw(|=R8ajHVq4W|O7@<>oKMm%Oa ziAv$qR7={rePnW4iW^X}D`%mTEcz}K#PTZS7t1RWl=RhWmnF-UxXG`yk0f~a$+C>x~W4EIaCrTxhWL!^V>S{jzI<#K=Q8j>AY_FxItIbRnkaZci zco;Tn8)B*A{Dadfh~nL=VGt3*{9y!$-GC+~WPMky7-J3U@jDirD-ILIK5=F>nRSXW zB!LQOXX$t)+``V6?9h=kCIEO4l^$)zC17*IVpNo|{VNnKgvAgF$Zi1K8>}9xCsg9yU=MnXS+7uj0|1hjSGc zKf2Xe-)9_VX^*`-srAb~eS)c-GK*boWx)#8=Jr?Fp!Td&V zl*M$%L<(49(>}bx@5*Z>m?dJSfW-=Y8%*$l>&!(M*tuvJ>W$Oz8;3zx&;6UnOL$a= zQLMdR*8_juE3vai+UL+KVQtwWqpKcqw}oOGR=EP-9&qlG{cw|Q`sW4zu4R~JxlMD} zzcr`exs|SSD|IzC(wZjvU<5-zvtLc%@NZGkAOq5JhE8Z6*CIRVM`Svf~Y7UIrLgUk{^8l3($h@FIVKspUwiNL>Q{a+N2LdHM!xUrJ0ow=c-?7s=D|JAb=CG7k# zp5aD%G~WW3DZm2o@^izk;_M{oEbz$q#nP3+6CeFsuADVhsyhyCYQVn}U{k|LcwRtX zMA1!aNb%)xOKCe86Vhg;y-43Lo?~-S|P=dJh{?Sg6NQVx|Q)rw1vpp}}N2ib^;T6UK4S)F%A{$p%{Zv>=$v%>sCq_uql%1hoj{Eeb{P96(7;Wd1MLqhBF_1!?e!CCoD(5>3+TCT1AMxl z=WzfD^P0-05J1^RyUFVt-huUOL2!BupzNhs$3hv8`h*Kh$XS=zTGo;=nfZ5y#82c2 zz{sM9v~;ZBNGzFz4U>;rJ75_Ye>yQ%>&`A^Pefz+s__m%1p=Ux?O~Jr&cHV|C8ZQ(5$8XFzSoh@ zoYS`J4rD)LEbRW1A}}|63W9?d&Av%gu{tqG9W^MVK$q8cqUIO zBK3D3A*jg=^|!uJw66b@9H*+@40!WBY--kQ|Fs^0e_NfbBByTLn^(;EaNi2*@c1KL zLB`^ok-`Vn8PNrmx8U2O!qa8&xz)T7hU-Bkxzxxr_axCPtRXo(q%Uq{s`li6aOBFs zOsCvGO%Bh0q-P5JpL-la#*T&#<_5<9OS=ER1*@X8?E)X1_XV3hB4Drr1hL$DK<-pt zcW;?I9t3VVl6-hBmWL+ihEZ9UWz|aDxb6Ng1h8-*UO(JmG|pnsQocVEoohe(cUu$J z9`Emay*6u z22KOJcMmGGWKf0h6m=}HhjdVQWfc&P!?`fbw3>;0%aVAfb|7mK9$7awZ2YafdZ>7S#IRDdyI(4c^$btqUZYc=dcc`wcf-Pa@QQjs+-0|>z7RE!G*9;?C zv8ug1YGIB@_0#z9VL4M0q#0wLtSjF8=j~f`Q#Icta!Nz`__D&ZzlrlMKD;PJf9*nXrVRd~<9w$4YCiRCebhzE>~tNcNL(NzTQ)yJWazheXIur9z+xg> zj@SpGk+Yfx4?=~^qo7I3z(w4^e_XGUwOhZLX=aVMXOX`_L9lexAdfR$+7HvRdSxZW z-RpcG8VhvHY;D!5t=22*tx%(WWd*B2WkIXnV_Cjl@%?wR4DB+4dF=;c%=(Y*N6!EI zK$5aG6*71D-y%ps+ES4piF<*>T^u7?+S>Y3;5WSUTuWK27+6TN03KOt{HJ%#!eRQe zN&h6#?u-L*>nZH5XgKRkV+CK+G~II~v?1a(RIFHp*L(Y(JFsv_QU9MWtBkShzvr+26#YLw3@@Z3T~~Po8fBuC zl71Ft&5cdV+fD218lD^PHpopk-i&LP^q7AJb$#Bqc09jbeQfVHH#%}a>;g(%4H0OZ z4;Zwrhmo}QL@=wJ48cPv%pdh_s`rmAY^wK;3B6u4SgQw~Ab7?TFp)M#jedkd^dt@q z0kIwQ$by@j<5Q%qZB-C02Qd_z;T`36tk-+TI>0%HU9#jajhIhp<^58dBL(m7kA4AF zT<){c)^1_2KW2;uo5_(s0au&8F&Uy;Zcwn~Zky4-XbyYe*St6Vs9Zz`G$E}U!Q3=n zb3p#uG+a~fx(@m^kh;fvj8wM`5Z(L3s&%q`E3Mz{eCkS(r-0cp4^30)yp_W5pZtva zLhqWt%L~dz(KY&+qzF-@Ar>`46^h~ix{kQZLoU>f=g#3SO)3SPGI3y;Pvv8WrF-;b zo2g4Z7ZW|Yt)4EuEIL%JL=pc!#@+R?!%L<+x+?p7byzk=bQgOnpMWPb-o8^dbf$&p zIs`7Y91cTh&T(LzEn!QwZu*FrgBYpUw4~bFk3^vnU8+xml6px33TvOW%|mw-AW#ryurO`}w-+ z4$8#>Q=$jbv@KF{Oa8Cr*JE{C?d2l}^yzMo&6D(=bLu%~;exFYllJ0n7{+eIEX|Hd*Q%3Aw~G3vQSoPHho)EQA;w8jyB1+wK^qn75PV?qv_^P zx}!1|?7ZnEDhw*4YEO||ZZ=|0p<;))+jO(<3DI4%5BieV3qB;3Ry&#OR9_TW5fW9r z-|~_bv2)<;p^nWZFob(c>c4a_+_3J^B#LY8KM-kK{=%rEdWZUe6y*Ds#iU zfy+8(XLnY?q^6D@nk-D4-Op-ghl3<0Rh}i#DU^{yAucCFHZCVa{eLKX2PR9SY+Ji3 zZQHhO+qQPvwzDd2+qP}ncBO5*Zg%&HFXG~KpD$wngLlrg*P7!QV>XrtKJd|^lCdtc z%}`R5u9HCr;hjy&xz-JS1Vs>iqxibZ2xfDoL;jCL7r>&kZ}%gjm8nBI&Zg#(BfN^T&h{qCs^!%TKbii$mk zc8^UtQxI8K>a$0cB*kpy(eUy!64n#i*GMbAVBwPHK)O>C(iE@A2dUT|0vSt5!78Bn ziPY-4$Rj0PqG87f>fs>HOnp_wrQ1dhF;n7hpLNi&!+^i4bDt}udqxxaJmCBi$0Tia z({4klXx}5uA{V*Ns&#f{{iTL?db_u3GAf**iYSefBj{S@{;QLu<}+765Vl~X#E7A3{_>*&>ctrNJge7nsU zgX-~dGao?uad>m%Mi9mGK?xCH!a~>Qm|ioQUQ@{FLtuJT zak3J}dM&~l)iEo3iP>0>Xz~EQ_?B)8Ck#_yyv!g~wh>lOeh|f6=AsOb6H&$iS7C9` za77Tx>W{<7Mks#CA)Q@Ks$-={)mBx2dgO}!=-sg0f_%tV2aMWXjH}>1#l3S!yBZ*+ z=fwO+X{-egs)>9K7oW<3$+9+-p>c>t0bMU^m|x@ai}wy2Ud>dV58 zxUQr|v(pmsJ>HRFFW|?b#hIxA?no*znhq)bdj=Ko)d`zbYKSMP#W+pVctWgE5*V*& zQ4U})Td*e`i(Vv1wW-QlLfX)Ci%S*jTG*44?3u*(?7%zsVMA2MTbZ$OA|=}fB$C&* zr$aTaDKEVC3o63*62%7eg!$A?-kA9{%|sqdDQf#{;3BDf6)H+u$$>_-Twm}2nkwtUCOC7pIOa05eJbl3s6YFd3mVzpKXv6Kl#T%;8%yB32b(8{=OAq0)keQn^2pDqd|NQ8?O)eYiVicu-pqfT)vOMEn@ zw&-xkYN44yxH8-V>i=eGi2No7c``IrSH^01%FTA4)T@Pda-YlhB9V>RJDsy&DP(lp zYIe&u346-R;07;;b}F6T`28xf#4Xgs2>S;@5^EvMl&GyHj8%nP)F8JxD{?ifj}=p+ahuJ(LLCden+fRWMADLS#M}6O{6w% z{b!~;mMpTYl}LJ1Qx8InL9BU%3{ma0IMZ0gU@M!V{XXRwwn2xcoD?-5a)ZJZc6&N~X zdLX3_d(c!f3;jmh^bIR-=w1D#?7PCgbU_kFv#qGd=~Ho+`ML3K`YC(lkeeZ7ggA3b zChiE(T&2=5mdVBXqr+ptVz)Zvmj?oJ&8Sj(E4ZMI)3hAcan%lZ2cx1 z(lMcwIy~}0m8QqSC`e_%H=r5D5Yg`lU6my9u3Df|hWI{LwDY^9HWS^(SBoP$qDY1^E4=;Lu+&~`G2>yuzhKnOo`A&JYKr?R3n3!@X*=}u)6 zD2pURa+r~d>QuEAG$-%X`wTzN7yHq#@avBu(wFdi%-n}xDayhS;vU0fZ$k5~tHkwY z*zV*>*Bh!@AMID3gu0F(^6a2jl_pUMdQQLac%UXg+1A5d0?FbbPzRg#kC}2g;XdoIep9 z4yQi|#238baukqCTr6}L3paB%`#leLb`1Y^7kF)81r}MXY#c`wVGuLcG*Jm*jFVDk zN`7vBX?|h;WGoE(C4ssLgF0`I%?(})ThQFDJlAF|j&>`+;6`o5HL7FYO}YGW)Gw-c z;#=Tn$4G{%n;U`+u4`XGf>Ew$re1#AD!#$LD;Ca9Q=QqH279)#fX_6Fry9`NauWXI zgtJ?N_|biBvq8JdeB!2~{^Ak>9+2C*;XrvPMqd1^;^oC9+^m2Tw|wr(yAn$PC07%& zdB);SpI@~{B+TvWWthNT5KT2xu9OPX1Z-?DyWG`n7lx|M=I!byVG?2Igli#l#sQ*h ziHaH=O(lbx;=EW}xX*Otq9YgtIQ+Z$Ls$%r4d<#k%4>=i5Ck*f;B<|h%rDFA+JJ!s zy5>Mk7VkMpD-9x8tya`=2Y++;0SoBJyV1P@5d*Objcsus#oj!;G|#U2s|@spcd-+& zQ+2EekGFuWIp9_B`aHDI4bd;o+Ye!Efm|fOXpk0}iM6f-N#Phe%8hzS6ZGY;M%5Fn zv@W_wstLtJl7Iqyh+HhWQY7bL${ zMm6bD#Mn5GGg3KkCRMH5K=3uZ^A0xn?z5%;DEDR#V&E=N$_UWAgLW$`(Oq;$w`%^i z))gvI1L(}lY8lt$}>{?oUrjBr1TE?j{*mHM<1Gf&x@}9 z?Y!vUQbzv`6T|pla(~aGA$JyOPh+MW@o3W#dT3dGRU&!W;Jc;OWSiL?G3FC%?|pnimw?DyZFh# zH0#0ZcfY^he>UA#oTho-yV&J>T+SGONS{VoH|}9lc2f^M7ru0(@W<|jD1D5A;`>(a zkyH7e{eqs6yzNAxZ@nS%C2LC286BR{<%rTRb=MrC*G&yQR{0nY8ml(|^1bY*eu;vv z*=yl^!S$sd!dLm23p#bD1^4Ser~0D#@f9D`bF^dk(h=@Ay2D@ek^+6a|3~SA9NTWk zukcA9)eh>QrSP^HT68e5Q(~}`a!T|xk+4Z7ST-D*S@O^$acGtz0}wkgBpNN1?mZ&W zXGCpYDT7g>R4ujNVEzlb!Xn>UR>{HW+=xM1 z<*8huw+GqS1o}a0BgRq5j!nu&0WRlWQAckWSmgrKL4X?0BosZ11R)inNF)2J-wex_ zS|{IYL&gs%n9EERKDIa%6%sOQ-}33~(o=Gf$%i!Kfgr|;>5A34X66AKq?}A9q1q?T zzepYL1|xXoX1pZ?PF3tP;1guXl5qeO8ZrWm_!8-qI>j<*YsNiEwfIk?T7}90%OY6k z@R369)&mw{{$4*|z^VCg;d6@gQEl{rJw+8BT}+S%(WHQWCN8ulr?LFK<=B?oScPGW zNHbaArm$)bf)&EEKQP^2{MlwjxL7uNA&roUmORugm#!05STw32Gp=1{I_ z6g<@LL^A?})9C~@v;oYru+5j}4gmw7p2Vd25w^b{U(wt!`JgQ}TJzo?U0v0JuF?eR zQ_o{;m&8Ch=if5ieja>^fCDPAhlt}J$+-2DhiRx}IQV4tS{o&@%vh__m2(C=7_#^_ zPKI{|YQJl5Q;senH(DzMj%}#;(All#$a}=;5!QWXFng;`WkV!$b**GXwX!OIs1}tR zYKSqecCS{A*Ud&+U=)Z(hT@K#^;OP{d#(A7D9BvAJKL^x>c!&8zGf7K z!>wMg;KA8M9j)ptVlI!dxs=Y7nDsR4-DC@?IP^EsN7{M#?1sER+UQ zL_H~n+UOTBIQ-CIvF0yT3|xm4eH1I*f;fBzN&a9{quwssor-zU=7e~=w~?LXcP^58 zXXO&OkUN6oe6Vr`#hpLlMM2WkE1Oeo6fde^^`ysLKEY~Fw!hVU6OXDcAjZ|Bfd)K>+NVi-Jb+N#-C) z@m0;?I+K){g9XS?;0BU!eC$dvU_fXFyLBK!F{AG>tAEdQ=JRNBvJ`x2kSEzcUvFRD z2Cv{XUb`5AKDb$NiaH<~LJp2q+qDb4PV}Z-mcf9MIfirhBl`DI-el-B_f^{I(PJ!~ zGx;j!Ke2qG@f1$)v3vr$OXpHf1m&*YF3M*%1Cv8oxCG&?9v~(nGss!Pl|sa_h)(FZ zij>%iUmfYPkxnA_7~jIhViwd@-_phOOUPN?zp>MSsO8k@Tp0>q8mhNPMd~^jJTlXX58v`K8gh>OcSv_)Ai;~*io=_W~OfH z@?^27f_*he7Nc#U82q25)1;l2V`E!xid@B}C@$uc02GhnHG z@8LT1u^xs^AX<>Gdy^!4&ZEx+o%&Ud3yA-MS0{e!9fokfO9Z^tXd0a+Y5|Wp<+hl% z-Mk>KCDRh%KPgv2g|z>mj+Y1AZS>{Qem7ygPmnecVvbwK6*DIlri^{CX(W~_q~Ja~C(jZSOAl8Y%~h3U90Q4@()w6lna`0 zkq0-i`b1_v(C!BsbD8uRGM%bx_YeW(`pHx~@&nZAD$a%Di6+emylPgsT7cQhqFPr58!kDhxyYZE1d>eOjn3MzF@?Q93Gs9-J$d#zK1}()PFE$cDCN)SuD}#B6kJigaW)Xq(DP{PX~y z_LW8e%V{!V@kP%_{`qE2cuiB9TzR?TS{^&0U;0s9Y>~1Ty9xuhGqW43T1ds*T|m+N zCUkGSpMrWpezeG)LDbk62wfUu%N2pAAOB$Fd4TdZd1_WdF3V+0U zf_L^X2OCmZdUeQ9E6_U_iZRhW$T@F2UIf#&|1>32)pPrZe@ToVDq8nc8=|B1`+>WK z#@Gd8{>{@y=BU@K@Vequ$yG@`m6w+jcGE(#YVw*c%lCN7Buq)M4kXzKMyL`_#4fZ= z_1r>!>{r(ZBICJ*Vs(k7YI3B~J(&7UkfPMc^k1f0gR6yI`Y`&${a9z5Pt9I`mrOML zWd_R^@!K`y^gazRfPCYX)vJcvqB_Q9zFA7r{x@g3h!;qQ3MdnU9bh$h?WTta7a6Sq zPDT!CT3l_2(u*J!axHIjwfc7}cCGrIC|`H_Gyh%Tz~-;?cA!-XjLd$frRft2Jaz6WX>FEVr~WmpTqj4 z7C3hR_%Y7)j%9c`H6b9R(}}iK^6RDiOtai}#)#?jympL)&d{gx6g#}!{>lJeasy{c zSV%MX)x$rlDK@iMRL`$tkTO((Bclaz|lQE{fwWN0cr(>!@gfhC3$4rl7{CK7Ux!F4|ZtovIMhOyPJ2; zoxMgsGD{Mop6(r5d(+Y;Ztl@d#`0<~0lu6f){!Rzt%Of1~#Q=ou5q=0*tdeM0J+M}#_M)O&lRmTou?H#cen!E9-xxY3o*uP#R6uiPQ;$7ZChPk2ue;6 z3q|u}BMf2G7YZ=2hg#td_*SKbvv*YK`Z*2_WmJ|8%9Wz;+k95>8g?J&Rs5g#(T2rd ze(;?b$ogTd&HnHV*j08QA4cbohRkSZjGL1$zZ^FHI!ZE~jM&ShC>GhJn{qaD1yJo` zEJ@p7?K;TNtGfFHYlrP^(oIV2SEm(~Yx_Xi25f|VKpqc)nHBAG9J=g(=*}w=3|+wK zD5M`whZ{~are0MdQ$!kGFo} zrLZ@112}NG;)q9UyO@dB1y(%UC-u>|Xo;Kb)gx=*4F$OwShB0F9?+Z*j#Ef+E2yRW z;Ly%DQC-T(#NFCfZnN(0!BvJusZE%BlvQ9`xwYx)mJ*<3^>gJyCs~{fzR_7Dh*@6< zs9MOugLy4cQPMdaJLeX&Y!EsuMDN>e@$-kT8>P}!UI^hb7ET2!uL6O!JaVXUbyi*r z0ecP0SU~a{zj?cfWjhSJN-7^)e5<+DFs3%4oeo{|>8B?la6sQ>0J3^XL zuxb=o3w0?)WJ%$EjHBVGHSduX;k8i1auiz+_>8;qlwR~AkIV5?TntN(o49MX;nYxb zZL45W>fX+h3`rkTfzhgInHL!KmH={n;9_;Z|_J-I~*IV#pjN7zkS&?=%C29OFc!AJq1XsRQ^oHSdM$nw5 zfNSW&-PbkE%SPKlej(BR#G)E0u?I&nZ0gUl_D^$8xA{xANz50Zcftr?y%jN2s~MSR zmKwfq&698{>7Cpq%Vj!S(3@BbZ~$#TWbYG~$Jx+5*f1#IW;nS)@hg9i z5S3hor*aPwm0VRMfL$>!Us&`w!(45yXm1f)VPP00^IgAEeeRPDSi1cRws1;kIMKmA zsx3-bCLqgfRwIX;^6HUf$Q?$%u4`le#WFJX6K3MckrA5~t?M8MsisLs zJqnw9?&PF3q?d2xU4h@tm70vQh4E*LVY4GQ8nyU-XsBDA{=kZ0+u?;s42Tw-R7m;^r&%!Mf-;_T7 zOb0ixyZ=Vc@e^_*==H?taD{u2Omm=f^G`i-{QN)jRZ?uU0~T*&WD1l%DcwE8vi!qx z@9#i<`Uls4PW2z)TP?x|Bpn;zkO|Fg82VJg1m1c#8ga)*U6U`S z*>?F~{lm=n{t?j5#| zK_~8;GSgy3ytqpjkDCkEKh{eEpT9^j(83>$1r+Up%ckJpz6IFBzkU(AooAy+h0xhG z7CKG@5HNLo#Z`uAiy!USClQvINWaAS$|Gb1jgxO5Rgb7HY^i9mh}O2R;$LaNQv{<2 zb@APb4FL1sVJ-QwkhV!IolaL=Zm-)uEUA>Co%ydkV&=ITD?8wVlDvMQPOQA0dSt;h zxqVQSMzqYsc-D(A$Dc+4EV-3TV^uMw+EGZ0Bmz15gyI191(#knW$Dh;>`6%9TYUi( z<_9%i4ENf!`fZ&N-?-Vuef#QMCmC;9%<*5K>LUl(S01pqi2*iK6!s`gBaLp)1sG{{ z<>h{(;K#q`0lOahKT->3w(@)We(;hAbk-Z$1z_rq>Xqn*?L~gn-s4V6W*PQM<`6xS z(qRyB2coQXNEjuLA2Y~wc$a_>w+d!sN+P$a-v&5`D)Wf0bDs9EI;;wU4PhAOCnO7` zqQZs&G;O`-=FlFN{JF-c~b-CYqS#35NQC!z4mrW$AMu^Y=xtIlMWO_Pz#x8j<~?#o@6 znWtubydNCzkzriTS(~Ce{);CXeflZn^F3%3`Q9`5-<$9L2ZKgY>+i+rGA4lUY5D)= zJLyt8m;0{pui`{HU1|a<2>0V4RXoTz& z_i#qo;9xVDIM4|sx$%R;dJ5)7Xk}wv3+;Qq6}yFB$AQXvXoumaN}gM0h|f|ZrTSP>&*AH( z>G>(qU1h6r=9Pk`-nNr><1e%QvI!cy?$8Q;OCJLBjzPlqhwCip;iL%yN9oVyQiTuma%z*(L&@2GW30vA7@jHA$<4?ljf7IV0D;=zblA_+A21DVQ%h)#*4equeo5Ndcoa0BT}TJ_0#HhVRHXBa7?Q`p8WUuy5ON#2m)cZD24 zM19GONOp3QAl6jO!OSPhT76&xy=MnNq1=&?cmCj$uwwOxpO<%XlNTWAQk8tb&okLa z=yU$~Q6&yxGbj$9hns8TZTBMqFKm4_r!Jo^Cy zc*!}$qEoDg&lCOEU(CX4c-WBJUtfSun4rJ^1ofzg5Uw7+8!P@BO#bg1i}OEARR0_4 z`46X;g{|4YX82iZ8_L)wD1T|&F5>Ax`f=li%SqWKzB3BwRF$;*eyle_JhV$D8v`1! z6J*WauJm^!HFsRM1i z`>ymIM>mKZ2{-$6#oDO_XqG0$T)HR-;(1lFDJ*murA{+d7b555{Sm9O7pPQqr&7hb z6cw#nR(1Sq=?N5CP^3{AE;!g|WaaJDX{T6FvUI$hw8j)F#iC@Ed1R6sOsf*r%BAuu zi(?Xh6O-yPP@^tLxEUN`7+WL(fu*ntH>iO|4o{b~+;R$6$ug8Ed`tblGkiwmhP3s#k<9tvMhl2fbDma{_A({yk8#f*I^vt#jS zg4FSsaoox^f-%I%p(gIl@Yd%Fu<2#Z&VyRROEboVD`Gey)pa2gT)Scsd$s~ATCyC| zh~AUMuL8Y{M1IVCACd)qN@Z~>Q&G7L@_?waYpz_j?o(KVhA^HMr6t%^=AcjBSW&GDVqC$2z~IZTvMMw_(t}0; ze@SY|(^5WA&7`)<06R8#LBD{}g4Jb$r5UT8Zl`{wvC|YqrCfC>SAM*5#4+cOWJ}Ni z2kJzpR@Yyu$BUkW6&wDS7|SUZ7gfd+rx%eq?6aqz{IPHhE59~BI;Sgpj(>`8&?c!+ z7f`!c?kbExHwH=LF1RT5Yd|=$r_20?UY5nHL}D9$lsVM$KTENYhW(FKy(z=u_rw_z@s}dnX{)C zQk}f!uV`F|?c6!IPa8Ip)ZRcl=6d(&Pqw&4DID`4)1(QR7#2kI3;!U3q(g{<;pkZ! z+JCcsWJFuN8#cWWRh54VJUINZS$-~y{_Zg}pBYhTS>Qas1r$QF9*!BzMDRR>H0KVsoC=H-|O#n#f}05r}v}xH@?>&*N@#dtJKf@5V^s& z6e8Gg()W-Se3Vlqg|Ce)IdMk~w${U2P|p;b=fT+G;S8ubIm09G5%&CGo9;jKW4C`p z!H)%p6ustS2ff5&yX{Rt=_|gJV>j4~>{{8n+Yd$|@$3y3ytHG->|%?$qcZfso$?hvH8hDk*x6!@j>UvhY<3&Dk@Xe{buj2f3p+xuIr9 z+gY*w0P8{h3p{JIUw2g1P8&iK%LiC~OPV@jh+#_}GjrbMZBYllO|FIB- zenWrSMM3^W+m*6Olk=D2V?y_$>&R9HdMnQ2M+?AxcgCTv^G+%55vw$Zi#dZ0>hI4B@zR~k}Q)_S)D{i z+Ky+3J<=aB_L=~Xv;xtIzt7|mY`&NWE*!c&4RXAAKqrcNDz~p{9fc|;L!e&4I_1~|85Z5 zDFFKg@{Xt#JSsm)(L4@-rR8EdPa<!lLJ!>_QKHea}J^*0e zi{O0U9{@=QQA!8tn}x12SY<#?R*;ho9P9EVK`^wwrI60X)JvZ#WKyWSjMiq{vV+Yo zNB&GSc7rDK67d(KF&*CPp59Ki(4?8krq%ow4PT$sgbpPU&|%reO&v(cg^byOk2M$! zG3!F{!nr-y4DijN#DyI*e@hb$Ql$bW7Mtl1t-KuDZA3}|#CR)SkubU({aQ8Jo)&E1 zGT;gvo`<2Y;mwoTX)CPMG-ItHudr;v7{GX|o_jF(2Mu=3C+ttka7?v}TxQwS3@nos z&TC4{s}=Bq-`!grzBbDxZMSU97^T`nB&ueC)o+Nqwz4EKA|c|%jB=UvyU^p3xXD+4 zCPuBVE>TYF&x1lxC`Cba;O$X+!*Z0luU$Vpe&fNcCG&UCL^<`f=;yA&X`92sK{7X7 zDIJhi@|2Y(Fl9`JGE*0ZbO3vv-UukS$JUx3C>TZ5@MvF5wVVU>XU@&kzmnX-L6^kG zM=a1JnpiQudkq&FduQA3OL2N)(T(BZni3tcvw_(3nR#9V?WQg07!Bex?N2&Y03OqS zii%=cut*LJwTcX&HCmkrlmu6;7Uw~4uwKOO%AM*;C7{X@F6Kzp8<^z~EC>nIi78uP zL3?FcXc=NDhQz#}pv%%1V}7J*Msl-IvuqhyuMX*xHHIi29h$qsZW6Vp#E zo#=4M@1$5d^XUp`Fy*<6q-Fzkv!N}(LxJ@#E?$W7ZcoUS%<)hut5hq3PN}OD%>muj ztyrkYLbGa#L_k)Ru)>H{0C>#j2_QEHZQQns19gy~wWr3I-dwK>bVQLL!tc_Gnr7R%g6ELNnH z=L&g7AWLULo5fazIz<-hc8LNsL~m-F`O+vhtHz*p*0Wr>sOIraHqFcY%W&7)s7spR zODtWP6mw@v-D2|;v6O^rMfO)#s99T4Uaaaoy{KP};ssrU^U%s7!Vo%bljD*6!qti^ zYgX=`ri0;Wc?#{Zzk?_b$#G`|VEyYN$LB~Mm&03gAR8PyzLA*R|QyIkfySuO>nqPLAI*8LJ zjFrx`E}&I<-5p#)?LL#*TFuf5N4%B~R%%X8%{VSfE_<>y0n&ww#F{ep7uG|pPH8x< zbyTptlk5-mcPw)p4MHS-XPb$+K7r8lR{70Wyup94)T~HKHqD8vhwmTFS)60-rx|)X zkP&-M###v1%CKS3$@fgK1`Nw4Cd5D)n6@UDAf;iE+&`=@96W3ovOZYJvG0YsF{AIe zf$4lF#5U4Iada4lVXbQYdrD~*2*`Da$D|_!h}O{>g5uTxh+x#)XQARhM*c~un_qmZ74xhCFlCk-oqajr=v6#A^TyhX?dOjf$c zLveg>arOh6N?9{tlDvThq_)72!QaN~@pg}K?0}?XRi=gVrYa^c(W=}P#qZ#Xl8tFg z(vd@T1ChvDr)g;HztBz!BEw%+ukBkgdU;+%s5uFwWeM%fYN_3gvD>Ubatq zSQu?{ud-gIsfk~tF=4bPB_+CKa@YXF42N9h-;2e|CPoM(5GTygQLnx6WMOY?aB*v= zv+1^4O)NK0H+5jOu(PmL+v&_ao`w=l{}?bn9L3)Gh#L?*f>eAmo+y)qg_J;w(twlo z21saS8$ZEja&){Z(Rs6*9DB{ZF!PDOy4R#ZfUY0f6w(^14{rQ2m2jhBSBI~Snwm`R zOug7N@0Th{eOOA6a)n7XK|;+B4!1kH+Zm;Y;2zRas`2htwC2~mnCK$Bl&vv9AnZ_J z*v5#~imdWCLE&B{lw)#9^}18ps@;nrClSV%fL@gz%2G3yv>xN(@_gG$zMBXFDz(b@ zO_K%rl~}`Vtu#5*W^`>h0u3&lXRx`GA<|pde}qyIfeslYpP9V*uwEttKBP}PDJ#D* zn;j~W8Bz{hB2HP5kO0c8ykd{li(ol25??%i)*VSRiMvT@_)vTWhlO%aG&|nqw$ZqTDWy+#t%k6_w zt#^2Ir}qzsvvelaE!Z7s6(0B=XX~;Cv16>6U9o!8J~bFpqhofslqGSRqXsDxi>@$U z(-ya}_mTeHKkX#>$pH_*zC50FFKb|)h_WpFeTTqTCklReVm2YKgL;3yQ(h)F_ZWCD zAC6B)ApQrOe!UjcpNcMdMaI7e_oT5$yKd^s70~gy6_@!Z4M#sx`heuG9u#h%?bQ|t zI@!IOgXp26LePi{3MVR_3rZVm_OF7`3JOY|@DC{YImK2gsm1~Y)TH}k&%2ns9X-Be zVEz_5Ffi3{|BplbS0FerS72B9+4!we(oS(B0&qheIF=Lz@(UhMQ(|rS}>me3qPk=YZ$yT$_V&+t;QjgU9aYk{~ z+{_-;a-;|kxf2=(dzd**U}VLNX=(%~im^86Aba4&Z{+lj!&HqgGJg5zq+z_N9hQGc zkJ;kU)HQGce+9hR%8}RIJ7b7F1ibV$j^SNr6CGd9xx*vCmVX*Ge5OJb?-7Cr=$S*R zBr8X!lK?%$VgJX`Wo#Ie#du6!esiz#Y{o6Y03LwO-COVDIH2Jv}91G1@O`iVKu?vT5>j5poW%mZRVaiL}-O+FHzwrRXC(* z{q|ba;>lg!m2AS3FN1a0(hW6JVa`^ra@T9xC2a~Su8>QwXjaNP%O`6ZSoS~>ZG~P6 z9Wb2Q_Gds^4FPh^-KfO}Uu9k1vBeowwV%^TtRuA*=Ub}#t@HbQ(4o|0R>`;FJ#ZrMWus5SU1|~)vNn#nCMX6DbpF;4}Tk; zN^gMfBY*^PsZ-pwjcSz_7_;8N7aX%uz`bTq zcdW+^9ysCNI6?Y1Z~p^j&&gUUsPaVIfz*%v{;kQQmyk+?qXvQ2`-qt5F9u$b)K|AZ z_gF7Wdw6wG#crREWSQfvD1LO^Z_cjco0NYUlK=ehCsFy%9g-*gcMmtw|2&=&wEoUc zRCO|OR5o%1*nA5e#wNDT769x2(@{DhCCrGxTV_*J_4ru{EvTS~z8zJaXh{hrq*%ND z`M_2+=Y=de|10NE%6=F8MRD&zOBXUy$ zeMF3nZ3`%4t72Nv;&Z8q2)+6Er*thw@uM@c{8mXd*be~1xm^-+>2lO%@Poiy70h*+ zlRN;0x~vPjEQaU>!er65Gw#?=&UrOc4(&Pm4!t8kL9@C8E%bV?8v=LGkU3S0=CbXdtp&9K*_Hxt-%h-MKd5M3dUJOBI&CA z#^ogpypuU*ydx!}PcX@h9jY(?96l=Og?m|j+ex|qt({chKY!i-$A|rANWyn$;eX8_ zm2~A%7*TkG03*5~^l|X009f-?P-_WqM@Yzkm&R)Nikr=>s*WHz@ebxMI#~t;e3+RJ zihUb!NJy}Hp2n`{O|Prd%gdo0{hptlf=$1WOsP``yhDS&ces%ZE+EWcjE6Lx z_hyt`I^2p5`i#X49UJu-RTYkb={O^sxN|oXdHju;HK4GeE~v*1{%ksmdm(E@D<0WM zQ!QS>sMosmCtQ{8hzHb{MOq(9im%7y7eIO}${6Lr2dYl@fc&nk0fX6agY?0YI3Ied zyg;fB+)mLlrD9zaj#XZz+%)$GSXHq-WT>oL*c!dcwNb0t&G}w}5GU4Q?0E!|(lA@Y z6`>Ih0tdG|U+3uAx!+Y!7ovjtJn{c_OUQgO&!(K>caApBoXaJv{79#!)-JO+)MD;z zm!q4?gKXtCFdxQLStsW$ew|N6vK(t#=Fc3N8 z`SDLB6DX;fuHd^MLjP?+u>9wOP%<&Hb2N5RvHMq6#=nZ7NLgAQSrO%nZoze(i-$&3 z1Q7x8{RbGRH)?E%Aprp-0@CJIa|;7QR$m%r*x%kDY4ximSy>iE2@=L?otKQr+f4vT z(+QC7v8LF8kvNa6c~AGe71O%&lH%WF6L^&hs(l)3Mh zk3e%vd#{*@E*OW}I=G#iqo^2X!(?}zaRxVy#mW>}^+s2Mpy@YJ%Lz_mIx>v4n}!$z z36Dq(-9^@Gun4fXfC=p zg7MkD3sl|%74*Ifws4n!_x*Xq(zsI{Ovb_tlVv;0^jH~;GmN=@9yX%_(?Ed}oUBrn z&x_29MaDqs_bd_67)*UqQ0j@QBEu;2h0m!^+}<%KyZef4Wd12j{6_*w^yR9$HXP=6 zSprlx3hRzoSk|5A*B0-S{O3Ls@4A@hBn+$)#=5Av_yC#oFFB_Jb@M1QxL&3${JEQK zIau=|zl7^k(a<9-Vf=V!E^)qaG3?8oYZ5AAKkjMpRN_R!0>cmmwstrKPd6CMJOqQ@ zkogZE8uJKeaq%Cy%8d^}%=oi6&2%1xWZz3@`s{zA|2{ZY(S52itFJ+XQ*F?nOI#D@ zkp4p*m}L0`ok$wSBk-L?s32^Ipj4ii|6+m!@?#T>7d=05fV5q|-gpM_g3$#x>%i!N zboLOwIHNKOqC)n9JD$q(WSvndm;J<=BNsJpC`a|&eQNP09OphCTel$b!3B?~-r)x; z;+D7!(Is&D6`qz=23mS; zmD~dqoNdO<>Ne9fYfVrw(Z$bSkD>#PG7&;A?bhm5?eyiWpr6I(o}wFw-5m+6iGF0+ z5i$cU)M-QMb{)~B#<+jOetOouwbrMl?ZbB6+N!B%$uEdD~&C_E@i= zP9EvjBqFi`lB*_zHU1!AHW(^HKSolh*^oCZrei$rY6mjM%N!OK&P9a zlp(d==c215h=X7+@*^@KMdgAKzPAYY)KpChfUY|!T4+R^>(I4y=tblL*U%11RSXLA zW=~#4Td$?LP0~H_Lzc^n0=Vbi( zBTI5!lw(K`45FOV2-2XRZKieXJ|UMAz;h~{%M7Q58c(9^>=g#l1tL?dFDRL_EhO*h z3?287+YZX=!_yvQ?y0dMM8jKYC-@#F ztLA^ghN}{5&9K1;Qcdz&EA}(0a6D9sa3G(raKH~z&BCUzE~v>sr0x*oUcsaNTx=fq zm26#mK2gWf^a=VJ6hMZo-Wr@6tP_Y~VNB(~JE1xk4!}E1MGnBTGUQ-HI>9>qEF;@C z-!pzL&$;TqFO51bk8FSXXDpX{zfn;Bw>AX*ZPfhl6>!1-d;*HP+gmuA{Nuu52KYx@ zwu+sViS7TH&-D+;WVpwoMOUlBV2Garg4NuBeigf`PJ=KMvXH7y_PS&vFLEo(!n7oc zCozl+3z`0#GLhott{lWDn7bOvbRyIDJ?1uJ*6;RxgW2J`Qc)bPns522$PF~Xr{=R| zUK~2FV=2*13nc~=;_*mht`Z7+Xj55e!wf}D;r(tY0sjT)rcH9^lYHxU_TVqh@YELP zxpE+G;Ocp}2qT#;Xl5ITjqz|M>PO_qyJZM3QecC9C5WTioJo%$CqfgpEmG6vMLHYe zkX|4gm>%9eiiB{KA5h_PEN#ugxGVlEws~2yd^36!dzpsQI4ay!Ku(4vZ_=DToO7UE z^ODF+)0Igf?N>;yEcw2vDy3Z_>r=@%c`5J0lVmxn!2KO~)RkINmK${aFsR3+p) z4e`&wBk_DA5B=f!?CQTi*sMx(wSLEN1|PvVFS*nXf?E%x!>sjU^x*@JS}5D zsh^{yR+7uey$4c-*M(jD6=Tpx1ckrTRnYE_m8BZq%k;es*RYstVGrpDcVR?m+CwIj zNR(fLROsdjeGqHSoMVtx{hgC&f=PR_kM6iOmPNBb=>~5*!%1aLcl&cpl5)holzR!4 zrrkYhJ@eE~NyqU!{m2NF{Ytg_pT1uO|FFS>?`tgYzfC{-9{_p(m)yw2@Lzi4e?^63 zCF8oz>j)vih#|s^*OSm3m?A+yssryL0fQyDOEzo($S0?*O-&&&uCaV>&|jdvm#8#p zluceQ;P1xjdA2%eK-`eg?g&&Tou40GyRS1Bwo0C7{CwYWdojJy1(~bMM*=-%%12m{ z=>g-tkpY^>VAT~P++?-}a!p6Ffw$EG8DwX*xp>!Utw9@PS35pSpS^=2FA^@-=^*4V zG*}W0i`5Vv#7St2mF>)v_5zPvG6rqYGYkxep3)9+h+&D5^buYYMA@~pry#yMBn!#N zJ%qTg_A2X+k`xIZZkk*T9_PNn15h&6rZjdo+foy^*0GNy1E)x(wp^E74ik`t#}FGa z`pN?yzr&n|$!hIm>p!CPg1e8y=9`7fIrB%7Zv786`f`8fA2Zu3={;|vQd9Dt$#FzK zh*|Hx$LoAiYcYN-`qUBaHQOieIR%(;N`EFK89H09Ec%(b^E>0!W7S~K8KuKQoCyHf}sRqZqdvcvMP(zu17jKQ|1xB$pabOBK=tmBX8>|ue zM!U`^L!6o&{?6_-NE)ep`<`@$!&DWTXpgRA_NIJz<|Fc!NAQoywF%aSW^n0 z*Kx)XC_INsgQ?yToY?Dde_0NmfnyxqUZ!i35!ENaJ~r3U$q+?|VlqCWQ>~H(vjADd z&%t|3J>HQ(e_PDyE9YQ_K`P>spQp)T>;nZSA5i>d*0)-Q5>Cr1BzHHTxd`Qkc|x?V zJ!Kf>1yF<6#&*iv4#VW7hcmI-m-J9GLtSJcySXy0?a11x*@vXc{sehSCs^X8teY?N zSXo|(0iqMX0Gk1&V#~!ryhrZUC8*mbrSZ=?u8p1JQO965{Z0F83fi!ot{lnZ0b0^x zxa?~hGdr`4W|}6Ib<)6lrxj0(Lc;#VMpl@kLb^|0M#OPerLwwU)nZfp_h}*lEk2fz%HJV=q@Ym zNd6jnWc-Hi@q_4Tosw@5GumUU_G8h>tA#_q_JDTVU8%!~u>!UAylsV(Y4uZ#M&!0c zF|@$d$FbdKZ!$RG7kdQtvpQZ)ZCGu%ukQD9lOsB=a7_n8HZz)fX_nnE$(G+L*-BFc}$MZA#_l;oR<$T!Vv?vBlQv#su%;V^_1%eN35UHrxzSoZpTcb%m4T zi>(qeqmIao>Ge{^uR03FOvPE}4$1dR48~;)W0oPAkj6PMsfms3l9F`Zo?OSrT1C6l zNcCA#!*z+p7gWDeQc}7426h9orIv}pmp)ogSuPf8KRwDpEn^wiQKRnm0*kF*LY=v! zt1;~6EoPlbry3o~)(zLkFX{`ADP$M&!&xHXz0Jivsolq2r9CSPT&oxX)k|fD?sk+B zLq9V&y)*<1Bbn!G%Vrvv_-L8RHwZZ_=EMYZ5)+oqPXQZrFe2>iSeF_No3B@SCyQ}> zmV72ar&O6`ePUGU&0_IBYl3G*X{(X~Zmo>2mMdvcTy8xc^d(%nfm`WJReVmi`6X?Y z;G1^csz1MhnoEPKH%eF8nj|IO0W*1wTAH6q!e$w>jgrqK8d@knk9=+7*^Q@`h5Mw# z5($J$2)?&AE}*F&8bd-HY&A5&Cgc66MrF5k0`3Z>xidRsm>1;3>i)%>HGWj%VDQ_8qn6;4ajJD4y z#)~^%_#u!73|e%wB|^OR+O2R zF55S$ow)^e;k=SuEm)UPj}a|t)qUQV(HJ=f?e?RCYB$y;v*Szvdac#nf!m;%jiHP0 zq2z|9KAr&j@*H*clHNIc3h8BfD(-E$w#MB?e4_0pyY_zbn_qI~|Ka%Imc|W6fnGFO z*$6_rTi*+RQ`ze{Ikl&b>khlgMj~DN;+Ql~DHz=wyE2Zy?~Z#1#M=k`QwQaVq8cKz zcZU2}$>+`KO=}1J++UaR88y-6O=E{`@;znj>N=tKiUY`3?^cxb;wdqt02N==pLd^* z`l1HtuN`E}J}lOy+UvU_5?BS@@BFg}+tFMOwXw~DeSEA-ohydLIIaC7Cnd!qy8`{A zcITOLWsx#1hxa9rUztOHR=*_1%IIV>vA7;fn<8F&{s4%JxY}_aB$}UJYo@}>61-=WUh@kS zsxYVc{ShqK_o+v1gATW^L$KraMHY$KA+OS_M%FHcYBfB8Q<1|}k=p_F7`PHSlILaw z?>gkL8Z8I`lyh0!(Z2{b)56;$dag%wMXSo?j1+Sj3`~Ht9naBo#nSw+c5FRFf~y>*A9X%*^68Cs#crTT-%Mo3eqBij}HQ#C%eOoZ0(1`mL#-Oz9948u3sqrN84}n2mdUHg3)>tJ)|!>=R|%5<)$aJ6hZZ5MO6Y zUzp%ff1!q`U;p0f#~CPNDMWZuXySerKshvK`~(kv7(jESSdzX#(aG`9Q+;>XWd*LN zv2k`ImOS7|R=aU`b_tl77&p(wxX0YeggjBW4VGto`a_@{qU7f_hDdE~CTYdThp`e8 z3D!PmsF$c#zhbe2L~GgFZ)Z?-V2;633vU>-q8{d7fnj=bLHyt~VPA3qCiqw`=Fadc z2u5lbJx+Oe&fTcnK^|pqX*eu##`q4*?m33BII|Ywr(bJ%oqR-EP!kMIZYcJC8{GVuKVsYy z_Q)Zqrbgo>U?8-hoO{JuGdvJVXjD9){UK*w!V_G~6If0??s5@FLqw_0#=IOjMIFhr zOw}+38b*Z@yZh~yF~^tn|7F``2%oD$X;z}t!!4YHA%} zL;St5(NFd5r4SYjgP~G+1MV=IgbWN1dzg&Smbe)Ptowt1R6_NkFBR@z1EArrgZ@7! z_5ZjoW6sT`QP5Bg0a4%qq(V#_1Bigf796wDQ;RI%OiZq)QbbsSnDj-ENs_^ zND)13IwecP;;>tIiAmf%>$$~c+IjUKt@_Xry`e#culvET^9ENN%+2!VLGz4Pv(m37 zC)pfbjvjMzdcJk`yMUsxj*l8P1XUqrGop;t#R!gFZ@~3KqC4(Nk?^ALJN9Mu-T~$G zNJeGbpV23QTkJ(L9~q{kRdXYw2aJ5d{pBV*KBG8bkH$F=^HelIeU8C+RmF8hwKCnu zk0ociQRIb$-JMoAazopHQ|g`qhnO%aYE}^j{$XV=$hK&{J(NF>HgcmBp(Q+X*@18+ z7f4=#o}E`jW$0|HlF$@>8I~yMjxtbHtgF~nPRp~;x*B*(xN|Hvx%}u(T=$%_GRDc3 zUFEtmw4w|ofWuu?tX2=x^x5=L&_gxms>t^v8aVsR1Py6FT}Ax}!jCnXCnVptf~^yz zvYdljpeI!#mNYu76`(5(fEoiY>>^7iNPd8?eVDi!^(LW;rS$$K7Qm>!QWVBrnXn|* zby^9AQDsxlOWY;FD6Ep=bym1^W7ao3CgBBjVLR&000${Q=SL$LM@m5rF;5%|>1oh7 ztot__$Un*3Hh)!qfdBuSn#}*Z`um6X7g$g>#uPgU48P3zC`EX1FPaO^9*|2Qs$H+2 zqTt0It2wy2-SCNgVUM(4N8yE160FD*TP+ZKYI^5rZTY>h`k; z9+byhnFzQJH$o<={0==&GRdCB3EYN`{NCIZ^p2Y2u69xkKp)s7=J?w;ZU@!@j z2shL|$r-8x&?hOS5dFpV-s+>P;>rzmJD@&rFN_}r+nB=AnONeAJkVZJ#3D-tVMbA# zc%U&edg8KdxH#_@M6&=$W))B5lvF7ma7l@%RNnI>)0&x6(21XLjj26vIOk#PJnS$R zRpz4GQl?YBQ- z08>sN-&L`-)VAp5iMn|{5~G?G&gz9= zIAg=sv)7d(zNNN2r+c(ya)qbiLuEYC-jBMa*F(#>pKNU6(Q%793ym`mCfw`jIS18q z@QuKAiW#V$xn2y~v2(WHq1&dKx|+10Nnl!HFAg>Tps2GnFHcZYBT>=#KZcB-Tkj~FrJ%F;m*xGUsUm0(I~w1#!6?B!ffD}m7%1U8QX$;|H-Q4I+*B) zMr;db_`NMYC9PVVKa&upuP`^O*qrR*?Fml{yfO0)TcwmIyQ$J^!uj%duMRJrq*<|} zGNw5`xi?@#g(Kqo!_hY7(LP=G=g{$uiRRlMOqi7bKl(V7hB5|m%J<{fI6(HS zFF1d&a4d3(3n`xzo5rc-y#aH7)VNXGkiqRC?98ZzAI#|ZbA|<)c7YVG<=~3UALp8s zf78SHo5z_2w*-<0JsH8;S;h0 zaeXELqfb-)Ax(Imb7!#bC>OeZTxV?b2vi+^O};3+82w8(L-4&J(hOreYhby$mk4X* zhyRme>3CjQ1*w2u^%;~%0JND&He$9gu|-FVGh}`O?d}Wc2Ep!w+=ulmkxSIbnQdXq zZ(*SkcNU_fI;PMJA{NB>feC=XotgVNZ)}4x@W=N@1hG=(QuzwPito&&EGyMe=L&)+ zO2$#;`ex+;p-XsLa_}#qyfFyOdt4H%aQaEhA@nePqS}n3!cjXInE7DvyEdH(lO+56 zdpIOD=KC5dw7|>72y`0dW&33WhCXl5SA>>ZL!OBdtLlJK`y-!*`PXQcK!gZ z@rHw?@s;nadxmGfZ*_)cd_A!Fg#Iu3jK+5)gF7?sHXKFGG?@!wHSVah#X{eDvuxK> zlqoSmvN8SAv_X{e-3!b0_9pln7&TCN$pb*cm)I{9r)F1IfHBop zq#O9J>E@n$aD#7L*0>Q4baS}x=X`#2rAhP-?N z{Y^P|zAOEP{Sv01qy4Mg^ox4(@A%2m#?}VL4obEP#@4nj|J+WhQqug(H2ElAub-t& zlH?Z>R_fL9OU?*D&?V3lp9{i5x;8f(amnk5?9fE=jrjBjmqLjWDX97Qa!lWB%4^~= z8#N(wk+RHVOE*zWUw-G znt_-qMw@q9vwEZ|VKf!<1v>OC=#0fi`9A*`L&Z2a&v5B01Vaw!z0B-S(h53F(Lx7M zVWhaJu)zo21>i3R1vN-^Hc#LRRu4>-sv+(Z}lutz8mJokQvIweWSKQT` ztGzT|$DiZsuaODdBGjC99yMRP`Ph+5Y)P2p5bAp>?}GTiOxjG7F&mxGdUQH9PQ?le zWGP>&1fnE4kXU;NDjI{KOllq~)RpcM;+3fxsP#m^uu$(a44iM*X7(;DwO9?bM-6?0rJ7GIZ(JW_K?u*A z*)I1Kp(&J24j=!`2veln+{UbQKJ+OOQJq57Iko(;YWs^&)tLba<>ry}Qm$g8^iOyg zHOG_zvuu9qFpq{cfdD?jjE-kaz4I|CT_2sDjLCYHvy z8rDSM2-7$<*q8mL_x6_~uXqM42~8gc8KL$<@w+ewnRE}^56uL`XbYKX^VrzqF4t{u z*XPTwE1s^~8f-csc0b?2TJ+=JwcuB=yEd7zf&+~KjR8?W++d)`77RZ|tY}OQ%?9NH zp%ZLr;gIj3DlzhFGstIB8$dzP4`$G?pe?akIjmUUO^^KgB z-rKi51#!KIkG)fX=BQj_g62f$;pQk_yMyW?$eDP}xH_rk`Wyr_=N5U*&?^>bRIBFN zY>a9EHqhM4ogPoZE{qg4WF%*PmvLB|$Ve7R3$}2v6&WAFQW>jdU#bC4i@~hc$1su% zIR{=0Y|{fD-a4&|LJke+YmZ=yWZ40S7UnaxRr~E3E>W484-Yr8xksh?m^wLpiVj(l zucV+vz%C-GTUaSPM>Dc#(?P7(3G>VbB`l5#jxcT0$Un9!`K`v)wGHIVh8lH@(mXX> zy%!4jr-~BL9V_N@WIlRwDdQtep@jSg+}EY2#*2r!M{4W4UMU#@{T4kzr2!mC@jKf@ zQn?;7x`p|$f&EGl4VpV!P&Ay6M?e&{<{Jz1j#18WK-9`xP(afneVxdPrg{{bFi~h(J@+EoT znyB9kv6l;`6mbF4b8=C~n2*dB9zFO6>3t#)jkrx$69?DK%UO5RXC41OUq|vH3G+czW z9RU~+ji`3mjMCf{>F+YjIb<@H;bgVm+^r*C1Cu8)eEUMDhiU9Jd+TlqWj;Li@{Y(( zg!*dc3o|E}GDusM*>?A$-kX1vzFcXOmwjc29&dm_d6jN{ys7EUtVUR94ar_B7XM*b zf6&^RYm?v1XkxPQhV@zYBm0f|*7-e<(#K!7{0TL?xGp$}qpYn#3LCX&*tQUMru2!X zn%qrg=<3=tM0ZG;t7H!=1*AEt3>Nj*;c_3WN?3$3j)Fa~B%{V#<&L|*ws2n@I4A|H+og3p~U`GW15&_byb-{`Em`p>D}iDoC!m)roARZ zC3juMmK;AdgG?VeV}?x6 zR@T=<7^#peYDk(19+DA^J7p}(5_N4s-c3S>1$ruuBlnUzxu-BJ>V5glhfu4N2ly#; zxVovcZyhs<$?UcwUmtDja+b^)=7$wXUPbFe7l) z<+I@sBeYJA-8l`9c9nY=XKDc_Cth&MGY-npC_Nb*K#&oK^FYvB9qJPXrl$D%mekcT|BH*6+V0Ng=F*N}hTR=8R zJO4sBJMdM^%(0Y9tvxk)M8%5%8D{x0e&yq%xFWF7yigdZL>7Gxkz9%Cp2it!CYJOX zY9BOgMab2~E&;9z3r}%HP!yZQ{$(&dDwA@3Bsrr8aDmats|t zTcGoE!45YXmo1DdhfA{>qy*aS!4Unh(cxTuppwScqV&{FFqxYCQZBJIw!}h=O{LbE za?+86SDVLYy+E z5iLqv@FC^|dZ9=&N3!90cY8MDstwuy@O7Qj@LoKq zgv1Yt?JRyL@(u~VCXfM3d$jW<4hyeCLk2FuD2R+svWuWlLKVvAn5B8%7XGli+ARDN zEbk2q30i_0)iWI?f+|Js#!gJ079@8)S`pSG@c|(#L0)184w2LQ$_@w4BUFowg;!oS zpzeiwwW%07(RfQy{Ta}+TVuvgi=QS6*#(Tg)${#t<{R8hv!MUgk=;iASJC`G7`^=M z%KkSr)Bj8G_D`_iLW+%M1cU^t5(@u0cs(TmBZ8dJ2cevFIqr#F8w_K0nzchQf#=22 zYe*FaCBOjg#Q!Q1 z=C`x#YGgJPza7modwrHMRP7ZZZuA7fB}Zj7cp>oC<2C9TA!aHHVE4<*t{K8wwcRSvfMf3JVBvf z*U23rP4f0h4f_c%w5zc3`ir$T8VztNvXMSVN@*C)p9#nsvW_x}7XX0OUfnz5S;eh` zIfw4{nbYW}@ua^x(Qyu2@6rx{6qC=L5L$q27ehlBBQZ( zq;JBe@D9=WxZF!-$s=ImZ)e`vI^fJ~!Xgly%rj0yFmXI)d*bytUUHaT;rqVdL;E4F z*gNe^f&64xj%u-!?Q0Ey1Wkk#Vn7>MPmmeQImOtDzuyD_(EkYDwjB1Jq)d|}2mpsV zLKfT0+vu#(@=M&Ka_ynvQ6@nY#g#gH5=5!ewLE;iY%KKKV(K&Zu8? z2>jVcIN(J}z0*w}W?Y2(q6cA}Y4ej@CnSULedW_03{wM*yV`c1@~EOz`I zzGU~x;NeYQ`ssFdjR7!In?}btV%&vdK9}oyWiANci}gI~$D&J}vIa#-{Mo0?pj}r^ zSe^O4T4tY9tqc|WR3_1A)9}tj)G2j!B;z5l;3*Bqk^js5mml{1oAKf>-P}*%Oi>~1 zFwz&-xmn(8;1$CJ>W)DPBFzv=Om@jn_^G*%W8Jl?(5-d9#-20!|@>C~a zTitjXbH~C@&su+OX4V}xp(8L~(MKMD$^)YIYH&i-1p!ZOpiq4}8mFA=-0j&8@_gh| zYl4tJVSmZo&q)1^o4O*P_0ScO*-)Qb-*7n?y*PTDTp0G2Feaf)jFlV=l~D~p4oRez zF$+KU)ftSql&|<6PTD^ccAlqfVEc+VbMd21V6~$&@PVxRL;ljiNI&WNz{`u@XI|OM zzlPJAq2E1KrjRbWG|4=nJ0?ol+e9@wp0slh+kCL1d(qOZi;_*^9zciNhe{bx;p8k1 z;%mDDeBiOSlG`w4_GbI{ev6$<`{VUBKQsA~wExdVI^Vy)-xQ2(j9ve=)Z`z;-jMCT zQWI6gL3orx7KwjIO};A-mqHf$1hIDI*n~1VxrR*2SiZ@V0?ed3ufd-R78?d6q8PAF zbtXAXZ;v>xI5M7JF7D93!Q0owP+lr^qwB(=Qa`Ib*r)1GLy+jW8dK^({`j-wKHLk3 zQNFGqzHUHXQ}u|^$<2)b(_mdT7-_$TUOe#%xjEV5Jei2c##j?6IfEy;XVub#De{&y zGD3uPQ-Bz|Cj@2O5C*SMmOs$>h#VhA*rHHTjR*PXmRYueCM2sV@Xsm4L6%6F^MRZ_ zC+mUKJ9O*%OyzDJ4S{0xED`jd7`zNMuEb{@EMIxs%xg$fH7*<~N#6o8Ch?Ac2u-HE zm@!PUWt+wJP%48I)h$WT58&^!Gni&I`t70n=Oq1<>DT3tQxhMEm8&$x14vIA{W%?I z@OQgP+JpS2e+uhC;-%PgsAielgEqvR?pyS&63V3K<5wdPdOc$2^Roir><5;7{6`x$ z&>U;qfY9PeZIvK-dp$j4%G)Qvd)UiRFyQZGoMEA9bxK%GU)E93vtUCq)cUHH*5LoX zP9HM3X1iY_*?;Y_{eOeCWBXqdS$8)jRn*Teql8BjH$Jgdk+^^mRw*Dsaf%5L1q=b~ z(fKb5rbS>5$ICA?H1wzE3+6Yr{cZkA0em*_Hjcq5eVZ6NM_mYK zH{jSU^8L~%L&BizBZRGhFLz}=2!5_Fg+60Us9c}!R*dWQ384+%(NPxRuAA;~jy!;R8iFv@OPz%$lp_zoSltAWG7$nuj zT8cSbpf=fPwqNl9f-|CGQ{}qh>M$brYRa6obSZ0N?#2Z}W_dD_4Zti?AW@nt3i@Z6 zg3ebv!L=Z&0clZ%s%%?d(_2KL#e6ME=FDYd5l7UO_|)xB(r(71rMJf7;{4{E%P-dX z%{ptvq0;eR6fVg;ols<52I?sn2?$|{^2C!?tn(h0tV>1foQ<@J%)4GO}f#il}WkH$C%b8KO04ikX$EN6r1Di0?(vK%a<16TWB=< z88#xZDKY@!jWIbK#N8Bu(A-k?SjkqYIYyBJYt2HZDPn@Rq4RH?WM1!sQ3Y^(GN6#g z?POi8U5w3#8jurFP;;5j<149f;DBqdWtK^DOfpuTt%)+m%tXhZN@fL8Occ2c4@vZ{ zMw$52Fheg#@qp#yU@K(YvdeysLF7??^!2YoP^x&@I?tXL5P!rr;mB=UHa#pE7GoXT)`ew(aILnIEaJ4#nqi7w@xOZ3(QoB$9 z5_X7<2xu@oW&lr9f8ZU7{VgXnB^+; z?<)e|``Wo^_7fuLb|)ya`&83zE2C;8)Hs7{v5Mq3g|MRcjFgSO8cmi@?Gd&+?x@>? z#>>ZyXLnU&SrEcH1Q*QDjsGi`m@KCph9+kZC9~Ju3othPIfZyVjpW~sRc~$iF zdLp==!lQD^pD=Y2ZX8j2dg+wkpy(!^nj*G$S}1)&w=1528$J-}DxQ!(q?%@vVk;tg zc1Tb+Pj-)L7(a^luA&~{-x>(EKvGMBGD^mgOFB|)UFVi`Cx$5YbrbDP<1^&@qZ2!c ziG@l^NpVl)n;JnZ`{(P$^i|0RVn#%}rvX|IJWo*MCLC2YZR4H9d5wT)Ro&!GVrqKw zGLyuYVxTK1f9Y_avVsojEykR#>)#>2r}x-42Ui(bFN>HVeVPZx%ZlaOZ9}Mn*|%>Y zeL4BLlkMTzuse(EJ=Ash` zsC_gyNr}9D{(%M`YG;)>QFGFefbW6!r+p$>%?ERBxhcm^_^<>{bx>M-7si8e3QJKx zF)%2``n6Q<7<_F7D>JRb`KK-$N&<6=5P#gOdXR&vL8le7v?TFpgR*mlYIPDqjz_lb zIGbh1^!y?1`tPOZW=*ab+4p>(UAJwLB#g#j4#DAR_nhjtfg${FS&3tI1+E-16mg-N+^w8ctdSaiwyS5e0r85ujxBb|Ot@7sV0kQ=?%7w-F3dCAlu?b>o zm!jsxm0vJjNbpyAG|12wdAzbRZ6sRkARLN|P=}OOiCHo0Fb{HUxe8{zil?^vC`5Z~ z8}Pv}5=n!_AnQ(m$ogEA0)qvA#g5s4cDITw5rN9kkK;V9kgs0Xd25i|2thGokzMbMrNYs=_aK zN4wLo0H^o;whQg1e0J-oW(O5XtFJ%e5c~F*# zJ6xwDquAfB*RZtRuL#{$FJm!}zovMs72y%z5U+j{kD1(auH5WIrG2)9 z*iK1&kNpok)lWS6huxt0=tK$lYy}uCrH6fvBJ|WUUwLsz&utlh+#6XW4 zjn7}ceGDTUR9{1v?~dctsU%#A1#EyPu$P z+(UUx8;8US!~uW>q_JaG>LhvAso~r>Y>HNk9X>9$Ups)0?Mw;62)2Sa%d)~-BD!Oi zvmkdq|0Z5BY|djSUo7D#jDMBKbN~B1{{Le$+Sb{@@Sh{$oY(&yLQC?#RMVbgQV^SVWQW*tJxbJR>nE0R>GuP7ro7*FA)N7`UG`|6i zRAQIO#l))T#pLOTuI&~u#)u%ekQBQ;dLj}Su@uK#jJXLAkZ>vn<&m!HLM-KSq0qt9C?q+FA&?L5@c$@$!yCUK(WW zW&jVK%%z9NKi=OJ>$G_Ge`TAWT5tALSYKFtI4#dk^>^#8Z!k&uw*53fyPW~AkcEP< zQ^lIDB2FQqI;$J(2jVZXUr)Ci+E%=o5zWtAQoFV4RF)1&@J(e=nx}#@XX!?f<%(HY z-_am%#*zn>;%y7Ud-YGDsV@Tgf|X|e2yx74JRMHc|NXU{6_PD$fvtWk*2!-m*;`N6 zT!3r#QE6iGW^4yg^r314b}jmgI3J^jLj6h71YNk05lqsaHBQ>*DhL{083 z%J=YSTyAXw%qxR zW@eX$mc_}!>~^rg2zP$geHVCOmqgIXI|6A=9R%4Rusp7lP2vTKP3Dckx^!lZ?EY2C z?LT^JDRbyKMtMm6L_fLT=vjXr#ISM#F4nF8$Z#I|NuEmIFA|z_93@b^CvO=CPaMQe zwDr#r9hr&^|FI09|n4Jj5Nfw>iN-P6lH&5X(-z{8Hp0;!pzY1HIaH3E! zfONJfZw~TcF{aCtmlh{sE~97*LSs23QqAxH*}a~50W;ItVfuX&tmIWh;#2U)TNHv9 zVMLaTq>5E?-Fjn}Jw~RRwLQ8ul&T@?zdGTn3gv^}zV?$P{$)$>Kd5p3L4fPW^+*lD;E&TkfT<602D#dz5MAxk1q858yCu7f@%(LONT6#`JU(fTW9 zifQ9aLiN+#MT5}h+>cbC6)yqkRuM4AnM5sjos^3mm{D%v0TSBh1S4oE_gaZpszJ=Z ztY^wuCG5(;wjabs&8Q6DpOXGG-Q)lYux1tan`@5Pj0&fvYq#)TLmiI;D-#x&~eMx-S(q0w>eYb#(MV0SBH4Qbje!AXnz?r z=Gsb#3>=HuCi3Fgb{(qU(Y$_+~eW9h5Pap9l0+}L9bi#e>x%5=8E zNQH=m||%KL(T>6sNGL7oas^5G0CqwlxZo z;2P^(b@bO5E77~@v&b0sfE!bWI9+gf@iyT->9l{Q5e&(Q>lV^ykEVmoQp!ihs!1AkPzOX{^o5aSj;> z@)^)jf@gxN&=JwMzz5k($na&E};vr(!vlo%<;QzX( zCD_UkGTLgM@qrp*$LLwXJAyFI4(hPRYPx2SSKmguVccypCvlvac&rlBQJnb;UC?KY zI8AT{)W3hY&6q<|aXO`{7okcMrb<2MnC-}2okMjjTspj->efg}??k73rMr#7q1bfZ zUwqxg>r&AIqVJ}SvvYg_ttIl58#}^@B;EVw?fzJdCPc5Ew?YGmBm4YQ_Zclmsa4po zBLOxH{nuq!Cok!HC~gn2R{EvjI_2huX;@0DYWb;9u8Db{YkjxnnsA6=knK!;vqVZ= zrK0_v!LX9Tr64{;4?IPP8j>9G4M^$Esc1x%Ocr3sBBN*l{58dZjn+l!4(Qqeb< z=fi|AD#Cq|QM7X;I&95>Qe{9LDU9q>$Q8!wSi1RueRMJ?%Nix*I>E5Ws&lysKS~rZ zD({*qz0?c_8!Ze&BmQJ~h%oN2o9+-2Ty<*64Jw#1nA9PCH{*D=UssqLwU8~gD#7wq z&#cs^USgu?F=y=li7sa@69JHuWDu*h<)YTKWqn8!%ZM@BNbu&;D^_Q&~^=q^w z@aT&dq(keK=k0(Mi7;G?ro9Z6%}g61F%_2010$y626o9<(LkOW2MGX~03+B!!$MMG4Ziw`5fv!R4Y>n_UbTdjZ(xyPU zz3(qzkc+Vp+oF4>LMoh1vo&GWV8~x=VDEqxxR|%>C#Wh5+0+K5Jq8WMz*xlX{dgkM zUL*mfw=6Z%dk&y_sWUc)AmykXR@!}Ft)Wm@E~buud??ddvT+kkq4;6Ng<-0k3ZdVf zNzH#3iL?I!)@Vs4=60U%9ifcT;gpLVAh#)}ong*O@w_m?DS`0SUhE#vG(fR(RoyUK$7y4gx zNTYw!BLAsI{C_xm$1YLBBwH|T+qP}nwr$&a(zbchwr$(CPTD%j$*Qhit8dTT>R$8d z{R8nvJh5Zr$13!P7s~sOlel_M1w|ebl86P+LxDU-;68BxOXe@i+1AZ`n4BEK&P6Q$ zWcVMCCj1Y;FN(qK`o#EGpsuM;t{*g$`Q<;fNh48UROyw4(d3A^V(IANG4C!?dZv`7 zz<`b<3ci)q&znFg&4o{JS-PvrK+3kZ%kPF8s_WwCSTj>Cx^wxIj|CBV$>JTlHDrW?WNK874B6?X;1gG0rwkR?DpAhhN)%1x(=-Nfo${^ zB0vwL!WXU;TwJSL_c_foNvks_h-jcz@5JU}8_%9?!q%!S))cd-)*FB0$kIw?q&iOG z!&31Nqmf(>$}3}@f2)5X+6{-_(u{yq0AaUg${Tbb(8I3xe9Uz#M8w_d7`*#M4piQu zcef+Mrg|b%bzy#_3@cowti>rDHqOigu1?xuSK}j87vE6$!lr}$PRhSeys2e+M#Xbr z8D$kC9uX$+0HwA^-5h5uh2i}bvBI9*qqC?g>_j{_VW!w@6cHHu!8s;K) zHf@-U?mA)&DcJI%3&UR80`@Lk1+#j@Hy(>SiA>kTsngtOOg#31vWq*w7w-Y?WAf6i z2VlzNSl*p8>EmwP^pf|$3qz8F!GP5K$kuXCax8q<6k9nhDEeUnB)$|k47a)k-L*FqkGwPRkrcD&Tx}f+>7vcu7I1V)h0Px z=xGOxzef64!fEC!%Tt!PJO&ybtWZG-D!OlJ;8GD5^m~ppV~Oa@D8Zk8WjuVYGu#SV zBIH}>veTPP@m^ieSq`1yphr<-{fxpHhSs^nj7wkBoZ!|lPv46(w-$6jDrZh6XCn+n zQ~i_^N-}(N8hOje6U>>=*Xj)HpP1!wO;Y=bF+{&~7l zdYLLD7RV`M*w5&i$092a!RwCHM@imdyo?oMPF>EAGs!#kD~rZ~*l3NxS#CY7w#`D$ z!%Xvyzuq7m z@ZJDF%OdZ{sufTbDkttecygU*qOS@Mcf$bm4*YOYw<_|ZH+Qxm9qEU<1lHzTDsAQS z)}?giD*~k4B(E!Td`Xj#}doWeB`# zW##Om8uG_I-}|+ku*FO<@6I-YiK5A}%#~c>ptY~ zkF2ZhONG-AqMXE?&7(X!N_#3GTxmqgh@u@pn-QXbD$~xS3|1bb3T@==+@2}+70S=_ z1@z+4;r}YDy_SMmyh5#8zY=-U-c=n^y-KdV4`A{!A%6#knNY2##|5IoC z9~F|L{2#Igv<*7i$zdW2qK;H;`Ux*~us}i(TUF=WfQ|8TTJm!{?uOcmVi2jxfEo?zWJ?hzLBHlerj5pKU#fEkmM5EQHaK85ulDnqE0!- z1!kwrmpsR*ZFS|TZSQ`pdi>Vo*Z`x_^M{M2;-jeIM%pY+V7;X>9olfAG=6lgsaH|d zsq;ZJFh=Qn8jd#Wyg9Mc_buZuqf=3@mwW9rc9xI;b7`3gfpxpFj03ht(%n|AjtZ`r{65xF2okDFMN;5{7^?(|QuCS-DvYt%ALD4O-2SCn+t2%5FxL->gX2zJtcupN7oq+HXl8aI6sn${?xTt zaguQj4({$80AAM5696pGZ4j;Z@rwZfUy(@ZrV~idI228RVjqaYduX*|><$s`Z2$PD@vGoe-O(z^sy|00m*1XC{vk3C!8otMj13C>IBCS zo2V5KOo9ul^`O(YO4bYvR!7*emZMn3t%0XhjW8ZxCf%>-%TbS@)P#tBrEIo*xz+_T zlEdKb@anApNR!-E^lI|_X@yDuwiW&_#`1rP5QJ@9o&Q@4>{k6(QY*StzJQ=eKlMa$ z@??P^lJbH86^0QoB3}?CC zzbD-0GgE%wcTd>ASb6XTU>+PF35&x(d5fOvFb0)iCSep!(}E`%vRZQ*`e)lbX`+?= zTqa-_YgBAZyXI$NZ~n%PF$_UBRJFNb?6@|V5&I9!w(ol{FgdlDLM|q?Y*=)<#66lc zJQ`y#*dB9w#SGSMubZvTDFKxncjh{{NyE^0O7tC6*r4!;S2*=C&-mV~xgCKkZtx?+ zt!gUbMs2SY5p+FQv|D0omn^U4>81C;mKUX&zNVj_u6;3E?8g%(76vj$9~C2c`xR4U zw{}@5n$Xy1ZE+pNF8T3d+{Kcj+INF?lZM>u1f@|aVb%s)b2U&nH8b-d)YyBf#7FQ; z($Aa^*)$dcJ#7{G7n6J24fyX`y^;J;hQ{rIz2O$#*%S5HK7(831J0;vV$=UpddYZp zngxeyxk)z?Kj&szZuqPI2nUk{-g9pviX)}2bZAd$>fKCE2^N&^|Gw2SBgrdlq)xei zM04How!LdpTi$PYNwskko>j1SSI|`C&iD|;kkp5vhI}f{6A+9S`V=pcZCIVQITin* zd;fU==_(F0i_yToIF2B9X6HAL3|n%Rg;^+X72Hs)B4{qG2N85cUh^t^1h0Q5J|?es zCyrR`3DY`;M}CoLhMOVf4=7EqhA2g^iYP~~jwmTFRuS%3;6K<_%~%AeK>{m1)F$&@ zg%B4YS!G1@x&D!TX^u>%G`%RwJO2Y!gu>Q_e_*0^sZsa9femSlsiB%Xpz8>wVbhDj;y zxNsz?cA`j@3|}f?N3XDb#<;;t9EZHcw@x{N0*tZaOcmixX8cy1L|Qw9;f0;F*9JBXHC9T| z6s;JCtmRgdFOXaQ4&gV+zF^vG2h*@;!?kK{p*G+JIo=4&vA~#lY;~LTq~Q zT{_KHW%c_MmY$5Y@@PrfB|ezECcQL&eY*+BW$>J&()(&GNc(f#Sz*1mzT+RJ4l9r( zK;SHWGid#RVGVUzyxWe|M0ZktXw)eit7VxgtRjqwj--XHY#Uby&nrJj4TXXUo&J@pHIwmPjVWmPjMkMBl2c1l>^c+|q#HjlP zptj=$e@v^&NCT?d;GT1x3*=~vfE*9q=?F(H5Fc{+hjNu7RN^^JFSbFoDrOm`!bHB{ z18yQKPY{X}xDEp%m?WZJKq8U+5{NEV(h9{?UN145NDRzR>;nZ7R6pSZ!ZowaDU^d> z&?lm9Qqb-ApB!DlIa?d7t@*etV8K8CU*`rx)tPuRX5oE!ciASUyzC?@)TUNrqaf_T^O{Ye=3 zv9i8tK%5h2d4O)8>m)|#PaLOT%-lqW6tRpv6vp^?2P$|cE^!Z6#7w$J)G%>OJYU46jw?yP-(x}D|0dzi@0lo8%lDl(y(MZ zIuNT{ZJV?3S0yP<`qToAxslM=HQl^bWXtN|Xgj30>!o8xV04*v$ty;I z%1J0>R=2hEw{$$VnJu==v#@sdE8vDP`!Oc6d&;W_vu+k*>t-!!wX*4Bp$?i>OjcYu zE8B%)QL{_mvLeve7;Z0RCgs>>ZcFV5kQd9U$*{6jw#>Yg3*)PI27`L;S|FD53OvGG zi)X)5&`QQ1W@3?xFRdU$Thd|<;uvNf|0xxRL^j%LZ>DapOu}+EX<;hI4t#8oFg8Uy zS2Hg)6|;rkiKtoCVXf(~iWCrq%Ao+)?N)9~tcmYR;IMUBUZY!Zl(Hwqt-xdtZ%iWK zp6frbiB0LR>6v!4Wj%p2g7gMmoR{$H5(bfQ^Y$2WSzNYJX2p@`)DvNKBZH~27qn{r zAs+>7t;(;ZS`X6@QxSLuGX<<+l#(POTPrKYA)lJCp1EnX_{E^vOIoyKO2H+CuJycX>Bdbhd$}#z*>`PW`sx*{qDd&?}dm46+%PcF=_GmWZBAGqqrl;QT zO*)Bpn2(-foVuo{1P5&(G}~BlS{o&&@dT`vbr2$rE{!pKHo2{>*j)>hi!isziYtJj z43;-eXA27^WpEzHs4c`=TD$arM{oh)U0VWi3q5m` z_KHfnM&nq%xB8(>!Aykm5&HX2GMRZa)hn$Z`F>&}3wo`bUb^lGCEoq`QVBvtIR{{VO;7 zC_jqLC_m~4^tah7d@qWn@j)3-@g8cnBFUbqXkrnNC{?l#6x-fJRRwk_ZeksSem2;7 zu17CfN%5aWsGOKTrm38e=yA#!6rIryT<7Uf!|^jI`P^M^$$cv`u zVFDbSAQ5q*aOj|xzZlNV^Uy53A16%Rv{#N{oTZk9Mp$(lYII&C)uh}7>mseY)tHPz z&sM<+?35@MON}(YRoT*)C!hbNNo<=3MqXPtOgp;99!by(xDux0frSt^p>rtvIrjHzY zVs$3WB;|e`YmNP#B{pFO7|E%=+>V}XniM}+5fN;*0BxgZ;?h%wbS+<{)vqD0+#VWO=on2q`8{u~E&45eg(KG}_9N1cxVFh8vIi z%;6oub=I+JmaOn0uK{pSkFeYI!PmJ%Z~0WNMc7$>=tVx4y6EKcX`DV5Qw8HhJwg-! zO8&2xbpeVYZwE$YY&x^^pE7}!D z3oTYdUZ~*;Oj@8Iua;zzn-F<{=~^zBZ$A}W&`mFtfNEce1xZ2vBRv%KXQ6ytS!6H8 zg)nHiCt{cII;ap8=01sv&i*yt^nvSP7dL#WHNdGtUsi4klAHraNog*8?0G3B8zhw? zt4ucIC~_6S9|=@|oZKvDY{bQ%=Ypn;P|0RKqyhF{<49l%Wce)=IxN2^k)96`^mQrr zIZ9UE2EPD<|Gud&t{@Q^*b)YCySV@VdXI2AR;ulUL0dU*Ytt>sDgTXN2GR8d!3 zra|hFlqM|d9kE(9JY^vYOUU8?>h?`Qy7Z#;zNY(?G6Mz_Q)tI`4 z@KI0fT?^btQ!{hoZK^IL8&gd z3sb2K{9MkO=n3>bN%vUld=3|6L$(}G4cYu-nWo5ekQ4$6`y1Np3_{uOeJil6enSV$ zL>S#Z%z-p6!(?uS3#f#^j=E%0&gxBqkvt8|fD z8vog4P_X_T>Lu_$gQGu@eLolL|0a3(uWL>9zg#4e#AB$_h|uQfnM zS|feDK6#co75P(5qB;?*C#zh-aPr1)#n*H|n|!BK8&goH#0ABG>?1D7_5@FMNrBj2 zVK++ZQ3q&vNAJQn=zkoAGEU4IzJ3r^lz+RK2>;Ku_Mhm}f2+3tGt1?t++=03QEV@>m3o}HMlnR3j6`Rlt>T};C#R0greCu2^IjX z9u6?$%xAJWcb?*Y@Ad%q0c%hTf!U!Fz_#*g-0i^yWWN!#vw@&#->iktk464!39g3) z3TZi&G$WpdR5r>c0+z(YOw*EZs1t;G=pPiN}YM>?S zD~vkDKp+(9_z;``ap!5dJU^~#UJcT@>^S~_Fms?^ov-&Mx1>bzPJ@L{4rzfrBN2-r ztIint7LXe@SJd(Hj#7}TIygE34{fO43v)cPl7Qm0K zX5tCk{ymM6;wBL+i@<&Xnl1K_5ELm=WTF&))48M*5V+m-^cFbtt9mmtSBjg<$NG<| zb<5eFf+RRIpDSZLce^pp{^io{{?BghkC+>nThhgtD}c_YV1E(LClp&!gmF>46?1r| zqL!X@%5{%=Yo6h^2oSVX`m%%iAW@Lo9q%q8ov^!K*p1`hOOa*Oy;dlpV!Sq*`YMb( zmc6;~%F#-y;w_G)t?7MBqv(?i^&~g+{=7HU1p6b@-Est90_hEA(wZ&Hd zA_<(tVLaPf6GP(P6KCcBYlf4NgjBo(YL&cs=5BGzL7yTLqx74vo-ghWb(ad%l5T8p zz;x-WHAfVxpCS7T{g_}0kKK1U4;?#IVTDZ=5hH%`OU)_rX#F8}&=O_wY#OcDg3y>l zeA1$Npf1y{Hey3pYd%x{sbhVIxEYAexx{ZlVM$R)bX2vd>_|MexY_&$iWvV=I8#W@ zE%!>HnX5uP8_cWBW2eR4*Q%#CcCeNk0^B1*+f=!&T%mFKo@ZF$b1CPF3FfccW_?nt zrq^EJEYcEp-&)spLFIJmH7_JaSuQX1bH?~L8p`=31eW15oOR7rTejc=@(HlPJWwE zDPe_VIFYmpAubGJcB$bjYy>a~@hdQHuaG|;M)}^IfFl_MRtdWXJQf$;wPb}@3HGr^ zNFG&P&LQ$D{2V5!dqfz0X0|NYOsLQ>0DIsfgjmqKoQ`lNjS&Vk%_yT{D{HtMXg;w@ z9H~q!nZgJfh~Qfn+%5FIH*%}PJN`e0r6Q)62i?z^h6MWGJ|H|8))&cjx8AkOZo=l{Tp>ELu#D*DTd+lRe6SHeD!3^3W*+fz9;;KF#UhQ%> zS2h-cE&}KeP6dEu%_oIhjzyv~qAU`CAS4Wlk4I3F@MQL8?`&->q;*gH^nJEy zYQ6dV_O_qMa`M{mjpGFbXq4=NGfNn}sCOGONS8FL(~3qFZ#bY(n=%=uQJXRwp0DBv zMRnF-OhbLpaHOHm)L{IL3awEej~b;>pN=|Rr7;kRrqAB%dS=}1H^XEZ!s#Swyvt>I`z%UPY8ttUN0 zz)+?wf6A*RNA6(Zy>S^~iTMMp#M#cX+0Gl?1?QJKt*5W#uqf4=sj(rJW!M)*ZwUbr zV{gtbwOH2s%t#EWS!9%yUqGs~7Ii9a*0~WE*G`dlx;R&_r1X&!Z!S90*6T6DK6~#Q zy4p1+kUA9MyJ>H1)nsgoRg{huu;t3xGI=$?R3w82gesLaGK;nqO6%v?e`d}p@z&2| zM{H!_$g8>Ll#e>gLM!g?$rX|pAK#Omr*C3NLOx9Qc@X7@q8dX{If*I7{X~4xnina5 z#ArQJiC0I}l@b$0urib;OAr!>S`j{ZFtgQq<+ zVakcTQx^*ESBxFc3bV`ykEV0WRnPo}U$w+CmNM?(ag zfq@q`uxQPV$r4Ko-)>Hc&QW#^Kjj<__8b)n8boZhFp?(vJ$*(N&}1*7B`qrCOg{#B z?@R=AUt{XKfFp0*UHr)$Hyxk7SyC_5rfB#t@V8r!E*+#T=XAG;2 zz*eq!fwQ`f$;zP$%a%QF4ud%4!3oLLI^ra;#KkfLF0u*7NkJn;@TR`4TidRTYN+U& zs2%@i3D=9vaH#p&MZU7%tVf#o=}L)q-y>xL%8OX$!qb_}`mso3lTZN;69`w3cnTf5 zl9kzKB6dn^TON1WTuQ>;z`0e4ZqzNa zVIyNoMfb(l{z|0!tq{3Bf*XvzV>v{7?vEQ>B_XA6XVSt}845(z-EP(M?pG7)!x}%T z0XR?5Lie7r_3>8z=%N|>+iP~6p}p%wm<|wH(PjH!6JC|9_V31|NQzsKXba?u+GgBh z5KnFo(t}G}z$*SA#tkfFt?DGkr6x4<$S_6h z)YmZKR2Z9-w7TxeR?hNaNEKTRp+5HQn;0-LS$=Bcbf={mc!ND9`uRRIFDdXi?b^Mz zH)=ELL{n~{n|ASL8A5s+Z51*=ak|ipN*liNtjQ@CKIH(NDi!@?UYxMDoT#U|-8A>G z@!_rvg!GdvB5pJ(_rK&z0q6q07X=BIc{8}vK6${M;lU<~f+uUIbs!^BsZ|?Il$C$x zaw`YOppoPRRb7aop)QjEc38NXxwxHlbm;JbuqS8kR4}56?U(G6e~Z5vTz=L?H!R4w zhqX0S6=sg{s-vNa_?GVO!1{M&sNd!p@i9*r;qD?Tfjdw^K|Fwoo)fdGnVt zK-Y7tA{paAGQ}1jGNgfm_%ssw6GKcV)&3SP+hivaa$VWkbgj;^Z``ix zQL1a2V_Yk4s;jmx2PW}wJ4bN3qn*3$dHW;C-Upb7E($a&dM^&DEqKhs9&q!{{anvd zKWL}>6jAqmQ%$>7($os)-8x7^x}gMU1VR_p@zpv^W2!|oM$045wE~HPiRMXPu%Ppt z5+7%NR#}n1Gk0p}p6607b7F<+HgP0M+t+nG8{0=U>mZKnRwP>|Rkp<*=O|!Qinr9&n$vGX1nkwTy_WM5TCmETxWmG8v*1!t zM02;pGI}P(Lj@rdH2@&snvYAk?$?msV3e<`nquIhJ|TvwexF%w&3LKvrO&IKYi@T+ zH02}3!3uJU1*gev3T|7tflJ#mT6Y&=(Nm@Q8ShsyA zJrfTgYN6aI>FbjY)_OgErb|Wt8>p91V{)|j$&M;Jw-H&|b))m`*W7&4t#yVA`+&}n zw4S-`LFtG*K8D}N-cW0fQ$|( zD@7Ycv3-|4^Wh`q3;2edlJ-oXu=iA;N(V7f4(4S0e=$=Q5egH+ zZ&GB>MndluqR@rJDZY~UL=G(1B@H||0EcAlqe1Ea(x%*kbXR;u+LGPZYl|CD-v@+( z?;k|L3#(Op1>=$2=k&-Oc-bR`s_lcP{6O&&+eg2}3Sr-0MezggExm>Nh#1h{w@3K` z{Vqv&N00)Gw~_)&;);ACOpYcXrnDq5rpOQ=Q(}scDLFD=3P~K4AP&Iv3!rgDb#s5w zuOMU?w!f?+0cUCGRaZ9NP9b9uf72G|F-D-yGGLkt))X*c`@$bL0tH~Knhj`I0DZV^ zg?(*=@`uZKhKRRZ#1E+mGw7r9VE~97cB1$KQBjJqqNuPO*u|m&OoxXC@USJM5h{+V zm%A%{D#EmuuG0gh)fhwzBn7si1Xz*xMgWu9g*PYF5RIEyM9Ed%87tZk-$x$R6r*RDflTha7UDGbxBRqDvfe$0gl|M)u2{60f!{X z243JEMGlF(A@Il`;|Pm%e33&E2SJ78!X)tmm4rQzOv24Ekz=H6L!^6)jE&;)JeI9~ ze3{JU6w%g*dBs6MnNSJSu@J~H3Yc+UXbVU(AbkKUHkWFMkg1?XVC!6fMK@fVkQ%{R zV=y19vzPop0n;%GXda7*X6TA;D8vD6W#+_QtL;x;J7~c z^$-pvv8{Z8u7LoLV(2@lHYox>ENhO=N`#jrM0zy>y~EpcbDi+jzGk31t|~*Sd?6fC zV!axHuK9phP4t79Th0IvcMVOSrlNMgR+wRh@%8l6NVz;ZI5?{DC{-o*Fcj7mr z7`H-Or)yE2#-*L@78iXJl*Un3M1Fx}e04*;#c^cr6w z)z!Wn)REVPj=KZagOf*C8AOnX^BA#T>eCAHO%axA(sLn=*$*fikjBanGKV}i;O2^I zVrTn4(|$|=eY5cm7U@I!{et;w1Ns2e~*-4?ABgOqfvcmN7&#MlON_s1u> zFC~M?0en2bd%ShIYv#QYwN1YR=!L6`5a@;4CzM(!1sgtf`!#Z)tQ9BVJ!Ue-zTZ9s zdv^qjj$hR-o2c_n)wJgwJm6LQT1;oYf`(J1<%l(8#~pY3bCyneC!`lbdS?)e?zd`q z*hIKJ6~b;VYBC!6wuYJZ|{6BcUI}H){Adu+S_2EN7l# zF7S@xG+;1jcpWSl>SsCA=S$aFQh=K=F>CSTxPX#&kvtgTfq_zK9=~kKcR->auLd`X zaF^CKND;rTUHgypAD(m&j)sggWzSGgh>-|FCE3erIo4= z{0;zLrlf4kspv9w9&pP^g5Hi31reS&26SkhM;fTiIJ|S8f~X#U_Krr@6_iJMQDuoG zX0_z|pL=<9t9?8hJOF@$&cEBs8UAMw`=8smu#M$U0?)s=h3_a0Pt>UBV_imuynLOSr}$$4}bYg@*@x14Kk zVm@E)R_y_@H0X%K)&-9k)%&`JLxA|uZ$k)s3x!P2VdPw|lKZz~W=IAlghTG@ytfnI zM4Et%Mz9m;1C{erw#kdE=~Tk@t%(5TUECHzQdYC&FrNre~p4=%MrKEh%;c_#`J zdr}ADeQGz_Q20S_uuyM}afg+#Nx65l{QcU~i(I11zdIRybQYIo@gmm@Vp|v+au?+!^1!Mqp>%DTCH_7>-)w z!3_3#-ZFPx_s`yidUTcVq2qbnrUvRqzVuSRrUbTb-|n-5_PP}U^eW!Q27Wsjqv#>W zxkGC#_;)ZO`J=?~Q+nvTe5ZjM-|a$ujmAI*Iskpq;Q1paepBK3E8n`aM>?wX^P}K6 z8#fSiVvKHc1mLj;jEQgUmF&^xr^P+oL(8N$1jEmxBN+j_-5>n9# z;H8AmQp#nX7b%5Ipk$ti@#;A*xcDizCz*x6kjiCJ?lf+d6|Q%oJ+^t=IS*C%OkveR z|JdbZmd^PE_Ugi;W+hlKAn2oOTA$u|)RAtP1y6GrYFw#x>(a}o_bYhj;OR=-LY$uj zXM|(&Tr+3~-5p>COIs1wr#kUgfNRCv+j>2)b@L!VL6IGMDQh$6^e8>5Mw+EunybZ% z_B+h!R4IT8R>!emRvITf8zdnf&SpBSg{y{mFbYi-k_MUC)AAIBX-{BJX)tUx+(!1_ zQ(SkJglJ}ty=6D#8dMs2Y*O`ao1DrL>Pg^E=22@D?!$o6^KqLZGzm=2$r@KX`VNF=ftXqn zVI)?mr!C2h_wz2Sph2dM(!62wk_?RTp=qL`HhG1Y#!4wdR+k<-es64juEMoFvJvC0YDX_>{AJo+igLc6U6XcQ z`|%Q7OS)0ah^I>3=IJN(U2JIP=WXw;MLXG|gnxZwsDT{`xq!Wq?v%Uz)6@LDC!lg z?x8bPwYtRQI_9VmbDitLg%Rmk{4(|W?(C=cD9|4hRZJlf1XeB}v89E@CO}fGdJU41 z%vi8W(v$_u&W|Pd)L9IrZZ$RQTJCe!`Vv1DAEvebR zyT^}Fof7blWHQgdU=k%s*P8|0aJ7>Z^EJZ9nG1shh*ees+nJDIymE%E&8mqQn=}ub zgnrd^aAYFxOsw?(MfCTZqQ5NFTsLjUgONOqp*&0aSZN+1+8ll}d2`SpZ%+bkA~2uC zC>?2YCDEWGUuqH+ZeWphluoPF6oOa|`m@EZSsMqERdh#3tmEZH9`)nv$|u%_O%$Qg zr-7GzG0nFxgD&*029gE*GHrJNH;Y|?BhWlk(><*oOID}wKL)_!rUiCRQSbFm5v0y z8YB1~K?+9lR(1;;fz{s5Ev7ou3MuH$qKv?92y9qTGZG{cr1VSPImsODc@UWn7b}xU z({Mb01qmn`570=Z^lf!cD!m0!@dlHt4kZvw;e4oK8$KJ5tDfb@x4|UWikdr5ry>Sh zul00LPSgW3GVHAfG5lq*_6z9|O7}0}OjY0;`$QT!2j*rpGSHJ;2zbyyRES^TTW5p2qQ zwO7~9DMN91CFY#rUq&WT`j`3&N9xXej?fm26R9BMpd{>zCxrn7rGav?#=QX-k1d8p zE7_f+bMnfw(4&PhS@=a_oFnPCTJBM`tw##p5zmk06Wm)e3#n(sD1+6)c?9Y|12CrS zLek82&BLVM-iJ6fb}ZW-7|jBpyTf{dnhE%K4_Hu)v%E z+0K!UR{iBEZ!`3sg9*p#PXB|h{SbBhVI-~MD5c`)djCa#gB4pRMY4jDOwOu)UXu{U z<3-TNMUl&EJOVRt!aSx^+G+Tg*+S#Z&8*<`(~xOn^b^YYwYRHJsTlN}W)Kk#9;WjW z^$3Dus`i6KV$%043tyID=g%Jq!_pM7bit^pCK?hfCK<>5c&n0Ohmbboy$j6PwLcU?DLo<*C=0~=gTBZ`MZXwnWEe?U`8btr#+qQ5ePCM{zrZm+N zYmqy(Z0`K(s9THQRcv0rK4?ZymhY(P4Ndz#_;uwjM!Tk<4JC zOLZ*bkK-tT4HU0oYhy8Gvu$PnDhqQUu_d;SB0FD~r)gnjpjriU>dQ@Lz=Cto)aN-8 z3BvGPvJk7Or>4BOg;e{g`m$CU*FE(J>8qYuKQ;-?mOWOreZO*5E1q(uxJ6l~Np=qe z?mv&Q6?UoFTiYyLz$n|B(IMVd)|OVkNE7nGa$6B6*h1F$>0NhjkN{s$S%h@0MWbsc zbNcw^MI4y#GGjN1&7LEd^x-&YqVh@*U=3qV6uZ&?Ka%lXCSXmy~o zEZ?j}b(Q;>(%+Y+rpi8UzVx?bg*_k~l?IUuZpKv~&<`1)FV?{l3bcTDCswlsdxlzw zB8c|b=*D5p5;#`1iu|cQLW~*Rxd`<=Ve6E8MXZM*h@(4L_e{?Eyc*~K*!xp6;A3Am?%|LN69MWlhP4*E} z^XOoV{EHI%a|mtPbw)7$MfX|`jgB+2Mi*VF@ENJk`|HkgZEpR+f}M=vZ-}2adgO-` zI++^BWCw#JL?Z=S+FcdA?Wx$^NP}( zs%a-+m96lxv;cZ4rtG0<_nC zKE-czlCQ92WblZK$pF{r2($1Bq{%saE41L8h8W zd}*n-o~Z_RpFj_vM6)^|n~u?H4yA#eUUevRpzcXe<$HLb+^9a1{oNmsIK!^I>ERzF zkh5rFUrtCGotlwhoh!+BBg3xS=~HY}<+H!7jW=b^29`c4s_Sk9GZ;3T&g93pX_5)V zk^0m+eUfb}SWVxWd?|LBR#zgpF^Y~_Z$_i#wvuspeo154zyb0?w&Ynz)=irTFwvMX zBK>9EBuaiw3QmhmCCOIa&s~XWhf(Giw%_5Kx)}+K@#`ebH^N7AGn@z1$&7<#-z;nV zqhLO(t6Un>a5Z>f=?k#i847#G>M?|s2+=FkHWZcKmoHsCbi%P*ZB;_awYrP)XE_DPMT`bJAid%TeavHG`+#SR?r=l)x67; z>_3X|#oN*Jg3;sOhiKPZ@rlU4_!Z3F^m3Q_Y~EG)8IrxBZ&~!res7IGXLCidZ26tH zyuk>0RTk_>c|A%8d9{qxB?oo}#uHv!hbCqOh-aq2Jsx2NsVUk=0IF%n8#%f* zXpUJBJz5J)%rlzDs3M;y((jDa2tSy4|AgEcv=z0@ zcG>1yjF(%GDrjYA-H836c)ylk^o@{kKbKwfp%{A2R@hURSG5ksO8%2UU>a^PpvvL& zpj$03?zc4q?rbBhh{34@cqm-CVj^w+JdaG@^4eszPq`v1C)uNfQXJk9{-JN3lv}EE z7wS%H-1pTVUdfa>;#6^C^`5mB2cir}k_CI@>Y~>55b0SX_PWw;*+6|HJ!&mUduJ#a zdxU^K((M_-o{&vd2d=fC%G_VIQ#WLjhg^)g{6)eYAloA_?o;OOK6Q=cY+q+hJ13D{ zC$5CE7lH}u!zQ&O9S;Tl7s7qqIGbIdr?;^~IXgmIhqy7`-Np{RFF@t1vN$x@93QwQ zARQcvvm)$0;~us9eShVneaOk2=}^bq9U5-p$Iva-Q&zs|e4>Ck##8Hp1y=tb&fYOP z({|Yw?sRNh9ox2T8&7Q8w$rg~+qT`Y?T*zsdDq%|e0!b!jd!ha{@#D@s=BIX&6@LL z9_fWbn5+!0s4V-47Z46=hhvIsOz;GfOu;_ct9oPY3m@4aHMnirr!&0YS-ANpEr)JL zFJWoOdxNM~fizzdsYaV`C5c2vQ9Zd)-1wtWk!rMa9lGZ`!-^*Xse7dSURIdmHE~%! z;npbe)*sg!9S!ZDMJ>7^=(jw{SpjJx4Utzwob$h&%wzng9 z_>Qf=s4iNAdyaQN@OGZ0efS2iQ_L8oGa@Hii5h#skf;J@B;@AtJfM8uS<3>pZ+o^K zvHk>_&AFxXqmM6(I5Eil`3K(^4p6GMz$xs|Bp)!RLS@HSq(R&m6yDN|p4U82+1oE!BRn0xpLgfi-$?6F1<-BG#hVN$0}yOl z4BBCT=pUt^U7)k)$xX{ni1ILJsh6)4dFj>_)al-~CeU3b0D46ZZc(*#$ zp4H3`#=7DRja3twLrbhe%^t26V=fMybasYXCtTbe1I`1}$JSCk*JILWzcxE85K}Xu z5M*o)?`1N67N3sH+T3=s6F)dttwv0@pNmsHQ5I_!7m{q6he+LGZCfUX%Y@uiW+75a z&LdIj^3r6&X0uAnHyB}WY#hWWpC`~?*huB`&G}_f1RtU~XOBrqX7IHFNJvqGg^$aPekJy9Mn*ZU|li3qxy2SxjUB0-$wshjn4ftWp`|Xl*puv(*ik~fAa4qjvGIrixNlF`J(%Y?nNUhh>?lF zX6zn~!LjYg27SrlF$@MM>+D;3JB%d7gcye`zv!%Q6!9zY&}t^znaJo;QQg;kKJhhZz<7G_JiMowVU~D+X)ibtVjE~m>Bb+w(Kzc- zh}y*)I7BX#97s{91Y`l8cf-$qM8IyCvMYt}SiHv5YqzJX7}xk?o!nOxMOrXdzuNhB z{(+--X)EtwwN#>n4VGA1UJ;+pZF`K`zu^gSd*4;8f-e&W#uQ@G`ME?r;P7rlz_}W1 z(CSluvV-I;>^%3R3c*vZ$zS8?yCh|}9q-J?9Hb&L`;H^=M;Q6TFZ_V_*9o*!Y#09s zQxM)g^Ci){*S#MxIEh3<0JR8@wrSGnhvY_@`G1R`EOCpg%>xGFY@0VRQI}Xl})X z^g$COJ!oN3iZR?m=YhoQV(W&QEH6%4?^*C(l5;yh-Iz9sz7s3!uWa6KTSAvNQ=B*p0fg8l+ zn_Ihe-@kZx(dL;P(qC9_AI#qstp69hmx=wKcyE=8wcLU{iqAOMris6QZfP$0;ZzG{ zcis>BW*fL>w3Yw@3-MD*s-I}D&%p1Mq{A2k@HcYLa#6=snNU4)53Eh-Q-Qeq;Kvp^bDi=(_&q{wx5S(zqDGsqUuSf zb?<6Sn9MulX;As}-Lq+runp1ZI8|f=9L!pC4(aRRd$6;$>|s~XjAtBqa)gXFYH3Ew zrR^YKVd?B3$TpGOt)?_$%9K}9WaJi7tk2A6+CpsTPO^vYYo?D3MA(+ihWM4N*$0~g zB(Aa7RJJI}zwZqHmUSVc7}DWIke+yF_ttx##i*npD-OshoZTS!T$%t2Yu zlA*IVq8@bIIVfn&*Sm8x6;4}no3M}iYUaD77JcBF07^1nwEDpvWZEFpIa6fnt>#x@ zLMMG4H_|kfk=z}4bmUDB`yZirn*RLEl$|_o+}y_%p~<^sIo~>@Eiqy2fo)mrT;de{ zWQld7+tj^u+GH8*_*DXo;K~T51IHdvFsMU3jF^vh^T^aXRZ|yh_S~C2OBOV6#ua1= zyeeE@N9&#-pM-_dm| zp11#grTBezuA1N*58mde?Lfb*26!+~+d1T<+#ZTOMpuy9iFHXgtHB`AJvu}9;9_0Q zUwQcL=B}3TOPa^`ZxuF0|NY+WpN+%6Q1$=IiRxePM-(R{fxpzn=GM$Dy?chDf8^6< zMpsjcRKW-3>leMPGgQr`6%wZf|LtsK<3MgdgDyyGvy%(^GP2M7XS@c2L*-Z0`<~K#>SCDaZO)0I&F^(}yuJ=64L}Jm<`zl0TGdk-G!quBa#k$|I*m?m; zj1CxvS%6UVUmxq;z?Bfnq362#pL*ZbM<9H6{vdj}16$o?25Z1YU2+R?+tUa5S@Qy~ z$m?tUA7bow_&h`Pjk11Ptn-xERkt5~W>-g!dn(XE7TF(cV9+)T$ zK{c>77F_3KM2MG|*b65JKSx{~i~zvm$HL3EH{kIN8;JYJL++V(D0J!v*lk%*)eqhQ zCCGIzAJW}6zieEY78R+fVk?sh5}=gC4yzmrW37dxpB5vaPDPEGeHZmbQ0g|^Su*LW zvH+3fv5IlL^;JVj(G}$ZS_*2dSs3F51JQ6}t0`ujfM;$XIAsntY9_7eQdL5!!Ikv9 ztg7j#%mn7>OveUCRVHRnT|YXURiq!)sTxTcm6&G*4g^)28PrvYg?#2Fsog`=(brUh zbJLcCj!)DXiJD{84IPcTPNexMIs+AXYY;1God##^XWC(6(=)Rg<@%wWc`pKimf%C> zo{%%x#}l(FTiIFQ7vK9%90xY#NxX;FuDTs1>s^LDP~>0v&UFW`>%Z-Orp)S%?6~;eEg#Z+T+5&>;M&p;fm9|~`$;e=YnpB-sDQ~N_?`vnNQKW?c zEHEShd5x>uC`kfI%XSldX=R{&#;rjuB;Cl`_+($pb-fJmZ9l9u$Vn z^p=ChLPI%;etmS}?l76RESOL_Jf;Uv@h~^uHiv_gMU>be^}6M|C>mu?9nn5dCmm5} zrytkxL=1>bv0l9nP}kHUu_1iB-|43sDH7E8Bf4Y=O0ODMKSdmQXpuL+Jvrm~EAJA6 zYonoj3nS1Cn3hL1%L$bPG~4+a)(whRoufssNoXdCV(h))HRR~eMl zhtpU!eCb_>SeFM|L$O&}Ei_`0TI#R{yJ(N#e?WGtHGOmD><4%Dzg2_Kj?*H>z6C+d z5Ws5zbx$$6Z&yZo%1>xbTZwCqMLfCY6pYhy4wCw)??8KLU)On>ZD(@`nh-m&KH4bX z&nz=`0&Aht-cDex@e4M)@O&N`_=S&hMRY%O@`n4~J@D)LL~s8<>7J*rmknd@z7aVq zi}=sCIahV5aTP)^o>L@UMQg_L5oV6$KJKZFpA0G0$%UXBec-a2x+6LX&O1U0E(3HA z5WWDxez8dILi_Os%UePf&?nM^Pt?G5UK>pdtpnB~S$d~m2fp3YpYp-VmBQXJQG0ja z0qw6(X1ey2QoTsLBfq1oeZR!$z#&qQi9#B_x=_Er?Lt}peR2FBg;B}r|C5+jJ5^d& zMfilYlEM(cInIsaA}I3@@Qc%(McGRa8vKQVjl^bMM*kh8{$QMuqU)Nf>-x>+j>UdH zq;P?Cn{(kb^zrl5sr_0*yAOb50d~3W{r32@zSPa~etUhW2jsLP4azP4VvjEyae`vs zgCFhY$Af3YMRaj1PlAAT3Te(qGm=^@VU|okos5j6Ni1DoL@N+aKa{+Hq)CEd zl@>os+GivsCD;)}t;I_X=mE(PnS9y(flsU%tFmX$y*rZVR*odMkBK-F;U?>c5sMr1 zGz1527OD9dly9gN4q8d$b#%bm`kIU96-2vAx)W2K~)UV zNg`}b>by+ls}jzOKO#qgM@B$}1*zQGDuF05n&!(HD%UuL>;PUm?PXlxph1$k_etOI zNT;U@Wif3jha#IvMkp=5vxZMc}V3099}jqS2UE{w67Hf3qX|OPG-bp z&xJf>%BDT077zVyn9K}A57RUnW;Ag-Jm6heyr|7Pa;WTRm$Iv8#GFuG491YmIW>E1 zO<#s^P-b&7ZT8{SFNxw>l_z>3)J4kO(2rnjzpam=*NwO5x{5Q`#f!V8l%4n$tM!YU zk&L<@K>IXmX29y+yL=*I$y1PgIcjFoOu2$a`kNC|t2Mr{GLPdf8;VKw>lM<`N?XDn zGs@Dyw3gPm28%SRx;LsZDGoQ`GG#K7%~+;T5=Fm4x=oK-xef8_C75tz)O%kA&QKsy~RSvi)wfC*+nu= zXRTiB@-P%0D{F2ZntstcPc@QJ(6DHwJ{>h}P3zpIah)P(7USogm!wZ}3mnOEQfKX) z%();2y0jSOmpnUWDY{D*5d)JgT!Npo>-cE=1ZrGm(lA`TIT!<}%^G&81cZiyT2@Q7b2@EeN|y*l?RFPq|et zXNoTOz{s~siOM-l%-UY_O~bc3m-`N^RJGPk5FH*GV5wXO$^pbq>6?T;2(?e`zY%M_ zoqMiW&yGc38>;F%lBf9nj2fu4w98uSmy)cjty~X%NEJp%sX;a*&lxvDeqeX-=f+Ig z*N2zt4@7grB{XLczdb`E_z13|{>&kf>D|1)zwP4ueJvV$zAeCzwuFDrJl*FBn%#h7 zTJ}lcF)mU=$a=Y8S3(wP2Xgq6%AJ|jx(hW2B3)}*1&el< z1kAESQ%r?c;f`vx&HmY=A6;wUIagaZ)ekUN$4&e=9|9?Npr!DiC4LX#KU@5w!++NJ zr3*_^=hDU}K>bP<2OVup1X+C#ze6~xHHCXfsY6d4=;qk)f+SGA3b~7$rg75eDuTBf z;DnQSQLO)-F@--@i)#OKR+Y+hYIo zn%eQ7kV%u;x+C&e7jK!#P_}#qhdN^pFWA=+&6v)#u>TJlo4DbrZK)JFr9Ioe(^be z(wTOZ<^4D=hy~gRYC)~+%Z(xcWx=Q%vDhHl4-4RwW2fA=0R_U@@8{`kQ_DMQ4S37_ zZK5vlU1Dp&D2iM?sPCKNJJ&dN78@B#RG%3?mdUr|02tZduvTyvH>6`CDNO9c8I=L{ znF$O8`#z99Q_VE%@wN0mg1Bl08ft9$_M7${#EVbo6iUtw&7^>js8bs`R%IqsT#TkF zrL)>R=gS{eegX^aX@rwQB$A#gruTm7d7vZXVp4OjIvI@}d&yZ5<(MoC?$?`y` znvm2`AW^!&%@|(}ZGCB^>PY^|gQ-JLRyFLSCKIJlgb<%_>jx4HGm+y7sU@VQLf2|v zukdZvO9cZ7OWTvsM8S?Zg}b&KDG3wq!Bc`VkCmAGS8zdHBXK8BbCv9Yl)YBbZG-~Z z$i0>ZSKj5aNUI56cC>aV02xlfz4F_5EgGA+y0U5krl1*BM()~JAD&TIZWe$j9|qhm zjBxM<0nfw@#MFp;{00Nh^j9z$F?EK`r+fM? zCfqaifFnEAzIzC|ovh$gb8Zwm=9eWxNXjkLKn45A4VJE{8?fy-`-~mXu~8>U-V+}c zo0H{q)VJWXh`aQ1qa?|x#C-d~=6T>0_^s*jk``;-V{uu_n1W&m8;R1Y_xUW7I5ttv z_6Djfdotl>yrM+x@@~`NW^F0}ra~P-&4>?6;@o6m5NzJ>k8z3v$2`m7S1*s5X5Jl5 z(Bbo%I6M{BODDkzyBw*LGVxlhpHDVO-8B3N;l-yl#15D$6r90HRs?D;x*~mfeqn)g zQmsvCl~fUWn6DSz6YvU7Cv`^AN}SIlDnt{u`-geW7Ei@FR;LV68uQ80Ys}YF(Sj-D zsxv3t@MN4PeVrkA>%7c&^>AE|bi`#o zV%QcSZ`or_-|eJBw8i(H8U;7ISdSB0ATvA2!9mmJXMgAQBBtpK6EPBTyxYS`Zal7K z4o${M{^A<4V0fTsEhV$GD2@neDV95|o}pcdJ;I*-YB2+B1GwJs%pU`5SuYr}%d&^3)Nkqj zns+`t8t$j5Z;~~noAMIsAGu`L#58mWEq#85z8@NX0KEi1 zesN*~XyW*97N>?s@i5XyLuqW(P0dZqsvRq9ishR$U#H%XKbGg0mdiJ-t*xtE?6+Mj z*BrMptOke)_u=`@<2Yc3FGMZQSMlGGx7?5>RL1c(9;6$XqFCi6=&JNj6 zu$H@kOEZ~)6YNGbYCliqQiwH5 zvB4<;|lA!izEs}{YHj{33T7KjR!OlO(|l_;n-blXj9)aO4(4!T4EtUY+Zye_H_ z4sGXhsvR`L&e7WdHABHYQsdI_|6IyP(4`Tn7znu|_iq|$-P-dBu1|7uUh~jf6IH|q{&Z%6&tcWt<62No$i31`T=1)%sPp#G1k38{| zI&#y`p*{$U%f;;`vg8GAd$>0n@z^Y&7@<8Z>>X4ILmUhXE~E$kedg0^`3Jz*?^t+8 zn(=HEcGpt3R3Yt)p~tEW&xZP~L-i^(h!FG|yPd&~?678Bkmp$&O2kB?SYeMuo1WV; zs=Psba4pG7)!DP7q^ap=vXws}uNKS<6bQtp42C>qlj19zz~Lb#sD*Wjt=dQ$NlGX94PsaCu9E?EFUM`_PStr+^>`U= zvy?sY*dC-H0VFFoBSHgZe$QG(u|uwg#G$fk-xOmDOgobnen+mz+QKv~rIBFp4A{x& zHJzuBd^qyyoZt!MTVREze&tPj4uyaW*H)Te_Q4mg_W-G%2{ur{&0>|B*kg*gGDmB{ zWa<@iFZJR#*qb%Ok(4P2jJ5ez$3^+LQ@$Z2vv?tZ+H~VNb#n1jCyT|;M~iz;7{b>% zUt#N-RGoOMwb4xeQRp`!^?mDuHek`C-X`lzUxfVl21Z%cZS6++q6Ih4jva-G;~KX8 zSM}xknU~mrr`$x*)3ijNM~tt(m5nxEK(QO~o{!-#Z;vR(MotRi2A8A~f7m>$L2Ns@ z5*PmI24z_@iMgYnaD1&@g<3>Wjaj1Xw2*^^KwB(34%b6#IEbtrY1$^)REBP4I19dP}2J0(02rT&BN6lG|_i;It4Yg)Qg--9&9kCBdQ=smDi$R zLM?tH8rgDwpD7N!N!|!)v^h~~k9R~Uu(?X&PBzcu37T6Qz$oGQj^82@$(`2=uavws+DLOmG0nT3OfnuSx%QEH!2`~IH6SIvoU;2(#OCTJei`uY zT?CR-Py9A^Hhks9=&sbVmt`}#7)U1~UmHw_G%i2*A^GLwsU^y0awXJP3DTosZuVfz zj;r?wn3NSe2XgZsPuYa!Vj%dI=g(=WoS@ z_7_rj`X;5bgpNOq)W0Wv8tz7rb2u@Y=szi>u34V&#cUyAPoNZYx;@HE677PnDDO3@Uo~A38BHs8p^uzb z3tPP(YZ-3*p3t$B{Y;d=GgPo6%4pF_x|H&qNfipp1rE3wuKkf8seuSzB5!m;;4VL+ zsKMTvHe&bzpf*9lk$DP05eUXGCW;&bd?D;Jj7T0g{Z(1NhS@wUMtha-Ck=u8hY*OpV`om5JEocdi5f$Gw%2inr;J~XSaS1D>@vf2p3 zCQlr}AJ)~3u3MDMFembQHvBTUvKr;vopIaw2Sm312$yK|wX}gC{JTNsKcEl&leX|* zPI&)QT5w9`%TP$+OInbQnr1>p_zc&79u0sR89^efNJ4-@rG{-a%t#DN)XAmhME$^3SWec3+lKt%`K6*QKRz75_Q$0_H+JnI{a5Q2J|3DPG#rcN{O_RNNh`r!)g zZR9l|I$S%M7E08KMVHF*#T>i!_?X7Y$uj#`Zo?_LEy&5ZekThoI@Q859)u7(VSA~Q zWSvT5)sunQ25OnpO8O|`HA=Z7OhJtb^3LKy3cQY_fLd3#z8^E<)AMcd$IbT_#Y_hm z68S$ibqJ<7n}w%XaLSD;QGeHZz`Rl3=F}ZAEZC~glEfb7hMsiU`JzZP+Pi7p?zr2Sx+=M*O7Kn#JHxuc0Lh>d@06r))W4& zCpF)zC^qNV*v~880Ta3&Xg6Lg(lC)(GSDc)k+uE$193$^VsBh2{4CFy_}86U2|h-Qi zG%?pRMt@^$21!V?u&c03M@yuyFg)qWqS(p(LhxO4K%u1Sw-1N}UO$2P(9ydnBR?bN z2Rv$)H#mPbBTxqEZD3-5idWxM(n@v$Aj4?0%s%oROW6B{!U|&S>_3TKhJ{&wS?7u- zqa(|9iR?7t?~t6`W;yxgsP9FJOfKF08EM7Pei|Dp{5mhaZ#F*i> zig_;8?FPt;eBY`JF&;YfYEstJXM5$+$EVBp+pi%_EYf5p@mzhwpcj_eD!t%diX%gzPKtWz03zL8AMjM2AQN_kDc2` zRQRH;5fPK=Hcan+NQaa78)6bo3rQ5~s)mReiK@N!pEF)aV z=*fZSr?FE9bOGFAJmxwDuKfO_Y78(giqStW=k zU`;lnv+ubyA!pL-MnY~}!!rwp`UD9YQI~2IXLu9t{r$%i3ib?-%|FHr zL21-6yV@a*cZ%9^d-*6SC|>a*XvfNv;}7)_^$}ExABsb2l-Jo+t`py-XBHbqu`CVAB=0UqgJg_`6kMD<% znJ#UGbXqZ}+5n7E^ks|$M;jS>7*%Sq4G6Z1{*I}N=D4(0(w3E0(=qQiddx~K-hp@? z{YcqO<5@IZF*irnCvO2#D%2HAjLxwsXMoksD;S&fdOo37;0o*4Y977&RAZ^j{jDVk zf32^q`*~21V0>aWcNrqLm<^O+6s=cQAW|*c(neIZ<)gF-{uwpaRdl=iFgAm<@EG zKv_t#4)S~+U0_8OmE^&WMekI!@m3T@Nt(fEb$gy^1gMnD&R~Zd7tubW_C?9o=7tmQ z0J5Cmt`hVX*y@8#dkh^j&PWgnzQrg&eE=L|j-IlKAqt`D?Lg+>VE?GC5&*Pv;$p#V zB0e!FJR=g?HhRYi>*f!rx5at{&gd@;5D7W_bbiEuyI$^6^roKl`y<-9iXt1m>olqU z82ig6F!nfQ%bDj5uWTQrOK9X|Q&KSHgGeTYCTe-^(T94C>RutE?*`Glq0zJvkGh_K z_@E{50N*LDcZ9g1@w?@$9r}KuIgMce7pSm5>6*V!A3usmWow{vU1PA5y%)5kJ#iao zQ>v6TK?Al6ih05l#X9)t4guUQ;^8Mv)*XZi7zJiIFcaF+Afb$EQW&#_8sof?F-7|) zO5&vxjAoH{`SbVFZLZ$aliFn!sdCunA&uXoGMLdBPqnG) zT;?g0?bG+@%h8#?h5IU~-lWNjE+|ap?0>mI+?yG~<@~t&N0JXG+xvrWn$B}ZkPDKhxc!@B*dj;atX9k9qaGv?s#XIuDO`5FLFNL zAG!SYpJ@YZwB=(9J)}!VM3CtSjrGTS8zF&H7WeDJF(=E{GQ;VsF1)k?OwG0vUi`6=m2WZ!`~;*}biDLB;O6W)jXxys5z@_T zVCtc@B#UrcYt2Kxw~iiAlVz(h(YS|d|5M`|9;r3B(ArhCbc55GPP8ujLo>@ZUJ zrTbhptZOxRe$1+#C=up(zvV71h#Ws|kv==&PB){H zViiJG=ic+(<**`oHe<4Y@;kL>}g9&gu?HsR0O%Z}IO zc^-=KI|_+;6=&qYQckp&>%QSB095&|Jmr};^xAVN>?B?qa<~*|FKh8~H zj5w$_j@bRwI3Dvt_em~}-7stH?hRJ`rsCXasX_%6pvlO*^{B_l`ZLk}EXh$fQVZ8cpDR`OeV)q?4j-S70`_plB_pjh=?*NS;#4zGi zeP-q^6zLW)aH=j!6h|sWXCi`i8?(PuMn)0nl5x-oYfK%&Jmte41zLC>o-U)D2UIy6 z2Yw2ODu)i7hBTuIIV$I2bi>e|K+mwhG(9rZFL;Z>VVVD6|M|&EC!SJh+J>1#B~C@s zMLVBf`kNIo%Z;`lxhZibM&YNNRzts>TlTs6?h2-+Q5g$DRTa~9n}3GOWoxtY%1|H| zj-q+L`PsNm8ek2ed?J%77e*qoMq99Dcwt(( zRbNN5acA;)OeX=_(NirLPi1j@->Mo3V^yTuBr}iOW@+$rpyk z-zX{KPZJ!{Xeox~!q8ry^6_D8<)=z)qac#J>-?Q-)#co9W$N$@ai{9Cmz{$QfJ5Ir zG+AeVGr?N)XWYXiQn-Bwe+Z2ZI2S?*{idTtEWKiY@dH|gD~iZ$xk+HK3Dh{Y-Y;WO zwZH?P(Cd;Q$`acw`Xiv2kWiT!9e`G63H)9H^xi5)Awg|N6l$q06Tq?H;5;Q&(6Fp>FCYV%A~yv|e3FSl6A!)l_ zf=AUsMuZ3d*e|EnvaK6X;pb=?WELu6(yalF+L(re^0=01(X!LMH%}2MLyHi| z(?ZiDTQ%q0G*V0$6BM|oqaY7}|MSiFryHp`6)II^QP6?5!?bHRhpCCr`}-qqFEVwL zeBUMMc&pOLCg&ByWQ-9xFhIGoWxsBbVju#W3<&+Le>=&G+GRN4%^qbay{CRy)TCb6 z1v4EO)eHa|;<|8fzrn+R$jwA~P%SBQy;!LHs*yhl#FmWwIThc-F43}H5}LQHq?yJm z)WL)LvP2+c%!7w`hpA@%!Wqe(W(7@0JcG*iD8h~sUjLZaVBmuKQ2dGhEH7cLNGlp& z|E|cVko_KboGjfii?Gm^xC8zs2Ffcv^xmmyhW)#=i}UbcTMpgb=gtOpkNWm7q&`dQ z-E;Gv(%e3( zkF6pp%4M$nQ@FdIlX%;Z`h6#mx!?u-uFM}J|NH!xHm$%Wp z@B6Apub#VJDA)p>h20^V;9M_hHVduk5qSVQzm?FKt$IwQZh8qVnKMc`kataz(2KN7 ztuzcpo4}$bywHRBV+HD7V;(mlxWr!jn$cWkPhNT7Xf@U1m`M`fq{h1hJl>FtLa2w3!= ziH1?uk`A7cw*lWBJsjEKLb*c3$FpC79^U6~tI|u&fN7&CD=cFuoH+LmktSkCfQhs& z8{9JDMgYXZd#$x?z;Rzaxsw+-*QYUrDl&1u1ZL3%Gp-$i8 zWCGlM^P_MgyB8BY)YT~I?Om+D96q-*!Tu66MYk9iyP%fiNX zxkayQ!_vvcRjW(aF=KbNZL&`Anp%u54v&A4TF|_Ikqe7%_KZU@$j|GL=NF{nHAKnI ztl0ug<$M_-Es}!?H?=;)azRd<*#!dA-dYlJA=Ogs=)1he55C+WnB@~;4%K#ELo!Lk zhy;dLYHdm8O*dF0D*QNiPs)@?whBJbaZ*N1N_qpGz9qMAQC6luH0ddZ*zGHBVHrjJ zY<~sY(=LW6#8w7K&w3L}Qkk=%PCi&={NlCE<@8 z5;tXuCY0|s$Y<9uehKWj?ilP{JBsj-*-mb&j4>P$RhFv*|v?#tEW7b-B@>X zzdG*vQh$^S1vcaqkGZ_RzAI#miUp9tm0+j9%p+7P3Ew0=ZWvO)NG034zetaCDE-fq98PJs;Ee zyC?$~xf~(Wp~U1jn=-fJXkJ-WhgKQ6u{=psf_jM|0=ZV+cm=}wDg9(h=t2D$j7jA2 z00aH!4_vS@xWK|S-dyf667f0WtHyYl`g%$$FOg>@aLW9E35&)n^hU7-J|I#LX7Kim z6;IY}5>Pr;a6T6nbWc_}m$+@krb*OpqTfd-b3x03()B+Q!`^&agS&&S-ulq0iK`Q~ z1%27(R*q|-aKH9};~)PR)}mSS_=mreWc_a|GXK9%lK)0z{>QOO{(ba|6lz@UP-*yul+I zpl=cMM&H2ob~QD*zKYM+;{$$!A{Wsb0Sf&TF{)1xE3!`oic)8!Ix$>{;kYfh)DIl6 z0fw&40zsOo8Tw-#rXxzfehAbP{fURvwG914ybSe~`9ywfiWk;oi8mI4RWt9R&58fR z`v`BoOX%zs$W%~-_VTgKPOo7!Wy7!|AtLNGB9w3qlh`KfM@@fog7!UxNv7txA6yx> z{G4NK0hWTkWQJf+1nDL~8Qwp&ljd+lPGXebB%rTErO7SwnL^ z9(?O->+cM^&5&qIkOos!FVwr-31R_f>4%syj;N*eli=tt3gj(>rHKmLa1%o`X23Bz zdSdP$UpCWS27!Ht^b??xKpoc=VcE|6RB{TSC?FP7xG z3+54Az7F|{(q3+lJ7fMy5HnAmYwgSMM>W-0eqOSX#I>V@9q!`BrdXg>|AfauZTr_d zRY9g|tHXxSetb#s4{UuD9NlKZAKbaykAkWZDkbSWoDSUVZ1kmN| zz~Qb`p?m&u?ZUUE4?zD4!jZqN)U5wW5dLM$Bw%Rue}|ro?E*i7cLsb1gMTs_6sRV- zU|g|ci=dq(YM7)z()T2YaqllHx}x*Vab2-Jy(Hit_Fp0q1qg;K%Bc4VI|Gv!CsTJB zrq^Hf+V`7VNGQ-*>jFQlD=^fPSLLg^;f>2rh3W};Yik%xiw+lR%%ivQQCAJ_gfVc2 z`9+P3b@`J#ab+Lc3>Mcy#gG#33}Nleup9B;hW2jMZly`gw1);bR0DbvG+7tHoILFI zy2k0IiFho0+bd1Hgf)- zuqLMe!kX00)sWRNd_qWw##9hdifa(<2JtV*|(k2JfAT6Gz zu3YpQo0?R#Dw=4kKuVAApI2u-pm{#vd8{uzZNEc8n9af;;+R}*xThTJTywSEUf1*h zl?rgfL*KTxULdBp&_Ue>MUbg*9|nWVdDg*iM0TAZ#1hy;dd5S`h?Kak9Ez|x)va9% z!NZ^;{vXEPDaw+l+t#hLZQHhO+qP}nuC#5Nm9}l$th7%4xVznhjrFivJj7ZLBVx`u zB4+RX!-Ld+)BlM#1yf$tZR$fnTM0w={KFnD6nInzH?ymOmlIUJ??HEb074hwt}rA8 z>HTMu97dz062}n*7>lNps<)7Pu^PnF-3$&c_@CJ6-T{Oy=u=_y%uRbhnT&~n&7+Ni zj47Qh#vlj+7swLGbkgdeO?qsQ2h8UOUEJ{Y4usR_bOHe!^9Yeb;&oEbxQ%MAVim}g z9obLSdNsNffp)sImD7^z8kM^Sz-8-@=Bt*a$}pBpTr6p&#vo8P>=^xzy%}|Hz_z}r z8vZD&3sbeN6ls&B5~GSvu&?adbQ2p$$G{?mzQ3YBL~5f1*eTm19MCIdW=#UyCI>CF znXxJCJ#P>ej184Pfn9tdz?f6qgvC4i)F9h+!vmlI7KAwCsF4vIgu+%g)7eQ@1X>3* zElOPQ3)tiOE zm^l`B zC(1aurL|!`0o8;Yva56t+ta}|afiEM^7ekc~NyVtyEsM-0t25thGI#+|!%)pv6>vGeQtiv=v`AUZSJJhzA1XIoqkOw2)*2qu z0||geP@r|QxRx(Ng1KF_nK|m@MIqZTjQfBS1)amIWUMv=S@Z2v_gl$9IY>uY5{fn7 zHLnJPfupY4b!!2vYBwbwytP90!O`{ zukh0PX|c;&8mgv~9!wN%FIMHc@%CN_92-W&Y$aomoIZ>cAWVjklCX|&m)J4blW5O8 zE!Jlf|Ab8+B0#V#CWeb%9m_UK^GY7LVkS$!?jGgCdo(wdMDn7VmZ(flr&*B7J_x0& zSs!m1Ku@_)I8T6dY(0aD5#ILm$mS&3(IUW(JrU*dFuxl)!* ztu_d=Z4us!%0PPpTMUP6EUP@1veLYj;{F~df3 znKy2V5@R_p04_}GN z9sDCOj0htEn?jOUdXFb6m#iUhn_+Q(`YS}!6IsPx0*y}xYv+pH?OQi7@CFqQbctNj zxIk`bR_DJAC}kixO`n3eXb>}a557#=yoIlu-&4KMS;DFUtDi9|@_goSxWMQI&xEWk z)`xFOX|Br|t^pZa7>(LETi6fj4$bQY`_29NwXdU6etK9Dn+kVM? zzX~#Gh^8<>Ye2SEAElGvJ^>*`b39+9N=GfYL4VI$B^D2VVhF~nPqfzj6DUJ)fk&-S zuQ6ogCqVrj?rS^F={OhAUN%GN z-5fuzF!0d`11lb1YBX;M`M%mbi2xcp2s#g9s>m0s8eLr4q3ct==Fkp zn=4Vg61+S-v9yal_P4U~LSy7unaA&nhB?A=&3dVRn*m$p*@_JE@ze56B413&k0V1m zRiZe@e3*;T0vvagN~e4K_?#Z0zJDrHr1or6hkndkTZsSFw!6fC-(>w?+cN*ZWP3#y zTU!G|Ymd1rfA%bbF`&>q)e+L+o zPD_Kg-AGZ{7OU8oYsEmRT981sSuItlSXFCY)HG{qS!uZic%N)On@XSq0(ajWfIV#g zx!H7@`3W`u<~Zpdd3bl_f&7&?=*GFsu}AW^basaGOJj!badV~D4S?*&&J`OYE53Ju zAuB$F&j)cQm*z*v$;v@6aJjwPYf5H493#uWdDzR8?T(t09eJ|bUha;YlN*V)8&d9$ zpgYNzdg@*dMCY`7#C?ELZcnXSb|9BU5A8S3q&vow>Cz?1RlD$U&|8^J4_RvvyTUjY zBJG`x zRZ{Z<(@r3+HZwG(t78v5({jAMPB9nn$$+?v7vR<$XF(R;qu`|%X1I@Rpj?Oj#usd- zFP>-a+5@PnLo}QhFtF~Tg9+KPA+@X*G4JVsTE_!9=?_e~FEg<2=@_=QcbTtOD7kx7 zrnkyiJFZ(CGT~bt-+Np>kKA%T``s|uk8qGLc9ieX+}p&S#!$Ya+!^c_IMVmcfbYYL z9_*J8pzos56aTtIO3%gl zHMG%X`n@$SZ4SwSu@5pdf%J=1zyskJ!eexzXF=eHGVI+Vqmzo#?}>+@7e~!?jJgPN zf#MLx)ez?TL1G(1>p^AD4s&9Y4$oHzCkRCw)g0g$1`0_#hf7S}vFk{?hEq&BR?wDk z?13X@Gy4dSQJ8{PygjgV$I_26taxeus~4;O|AFEPoCj=%#1E@&Tyj zlh@iWuPrrw>UYV3$tfra@98#oB|ltin#GHi785W3y8_CcPy+7|FC8VH5bZqNuV2bbqy zOtvQ77aFRcXRa`Nk(tBqE$motY$4gu(A(wdXQKn0U(rcip>YGTh^itgSTuR|XGKue zg&z5S$&2tyKX0;=+x%)G14vE-HT=cWC!Z*70pXTK>%rK00gETwuSq!~9wV<>^XqilShDmkf;hf9@?+)}ZBraSa+#&pPcxyMm<}%8%0v3>Ro5Yn@vc8O4efa*=(;`oaEy3o!zyjWwunb z^`$IhTMu21Y7Tho5}bn0#bJG)KgF`P>5C=^co-t8f#RD75oI>IX+@nY^NNvT4pilB z;6q_{7?Cy}xC9Z<zk(re zVWQGz{9%<2)xxQ7i>(`WoNU#uCY&Ug1;$DQ&j)KxAy#bgQKV{$s3|^X>7?3@liw0P ziKYxXN%S@0WAdW;j`og)J|WJ$_%=AcZ7d4?`c@)+O64k-FJKg3lT;46!$&&qG|Q+PpVDO+U7XTuipDdSYR`CHw(h5&GoI z(+fWd{$)}_=)Pv zuB|TinE{w|r3Ba$_y&jo~Fx1P(qm5==@my2) z!od183S^)f2MosG)e^kM6XhWfOPRLh(cfsX3#xY}df)F~x~&;UmEZv}#E@&qmp#|x zcP|DW^_!PHu*u!Rk-`(NXQeDF*q4dWg+Opgve~K_>+^6;)3zPbc5O)}|1}4m$12i2 zXbJ$9EV`>jUdbQKbt0~8cli#&QJU(gaW{o(6jX2U;8B>{bZ{z?_2iXs$;D|bmz6j#}F(@g|1)|3b<$HG+=x5-r4*SM`VXL4B26cm zw9&*R?CddE*sSSseWkK>wwW0gDOa}=BM)xDIfHS-UFj^7-pX4tAl|?@n3o^Q;O@0$-fDa;%{1e7a_6@|!+!y98Xq<19-*zb5m;+LfwEmx&2_hJGwCzG?ITRCH zK;Tvs_)V6+_>F^O<~|$HAW+>jg5yX$W=2)C2N(s?ahLjD zcqow&T2u_fdi8>+;!t%`%JON(K}Tw)K}dmf=^M;n2%$H0^2Ddd$Qv?yIx>tY{jO*b zZA@%gC$>*w=hW$E1hx3w%l?1r;wrwj{lf@UBbGwT5Urpc5bXp!SCn&#VQd>1LN&SAx+9ZdbP_%Os-eeb4m#f_S&TMer&NTF=h*MztBy)rY!bn~jQxoij?s{Gq zxw2`QDrsC)J~1Z%u9hqs@j>ir*j<~<>fkZ6C65Ne@Un%i%Mee1>(t^Ho zx`Pr#bNEAG3$KMRtfDC-lW7>xSv1Ww!)X@HrOK@+g|-3B9oyU>ziA$xIXIXDfwpsBqzyC$2Fu9aKm`_=w~k=$bfe#JDqe*ef zVYyQ{is0Hb?vGd%)8LRJ%zc8;i|i)#tf=A-A?~=`sa_=LYBEylh&Yz@S@jztied6DeSC5%%}dq?%Z0E^ zjY{iKNL4xk@=P>nl?O`hL9#;`Z1|RjtNLqmz^P0D4i}ngB5B3nzpQ+$c?dF`s0Y9q zuzMpst*PVW%lJvR%-V<8_8~-)kZ6c?_7q`-(k*+2D@IwCo1BH3B3Xr+qF{9{83%3e z==&kWJe|kiAHe(Tj*2pYJ5GOVBv;|Sk5JunZm)ASdxYZ@diH|a_I{c9-aad9M zrRbUGo?Kzfuy(PpAjD0ITRI;Y=^x*d5gEN#d@S0QNNkhBK6nmsS45k`IJmIy4di>+ z`^I$_O`CHR@6a7^Bu+8rwC|zQr5}zqga`cs*v(uQ?>i_JY+x>A5uQ3k)$vjoki6-x z!fm)qscoar%JxmHD}=5wK0VP-49=4^Bk4o~PozJ|G?+^<9JMlpl~nCaW^4@c>Vq|j zj>qDx7)!8?>_-5ejRYp<`7{eHYCv*0`T?MJ{1}zBo0lN0 z{7lunDj5a>Jj!d{;mAqT^06WSy~gC$Yc}_O0Mg5Vuz(2%5WzErGGS49kaX375Z5Mn z*1^(!rr-fur-B1D=J{H?1kO()xSd@!ERMF)k;Ct{P=Q@Ma1t>Cg{AS9um6DNVm>rA$cA?R+(js7}=SJ=xtt_ z7CAJo<(Tl7mb&v34DB9ZoSqYs%W=E6TA+Q5CnOwBC#i$L08!ppL?4=BIt`8wPiWM> z`t-j0Z4lrIy11&3-jwN=@f8zTB$*>p@>$uL!cJB%F?c;nhtCm55kF8zEDP%kUS4Rf zq-^nSHU<)DL#xbXDUw^S{$S0vex&lkVuS=2NQt;Bm7XD6mWps<~-v(xls@U$=okxH;LzQ9Pmp>h~SNS8mX3MC6_@tCw zzhSB2MBy#1Up}2Op-MOK#WW>~(Q{tZkf7%`ESY1Qg9if`;aeVS?DY@>DPwMR_&lbR zc-c#E9pQO^$F;`SMruA3ME+Q=i_3$kjw|DO$>IF=&9-zE#W)kzrEDS^paUqb932BhP7km zlUz%|RToITkJ#v5g3hCN#G9Y9S^w?^BmvvNpw?Ot)E3@uR*L;$|uRBkdv)E~y zcL#}fYxNY)A!hNyUpy^-`Dix`G8~ss$QmhyB$i++nx_lFcth9n1qhc(Z(iAVgGPgk z9yET@hxJ9!08?uZE)hpf2|ITwXjApAixA${(ps4egKBCoqITn**{k0PDc0kKtGi^D z@NsPF*GvH8%@UYEW)P&y?(?^3Q-2PUaWLPtJS*unPW|)unGRfD**JUMDA;k~w8 ze9@@^Sn0mn_t%@J->MkzB@7vQq-VXCVl9k_2H71kJGg=yf{H!N*LlI(xuFV2A#4nz zK$!*gqW^VR>ci++;D^Tgnixwf_h6xtm8<4VgjfX15vHl;V9t6}Ex~W^q|D*R`}>zx ze+4LIyG5aIw8i7rys(e-jk(5BNV#649KK0zLQrK?65k3dTni1om|-=x>Q)R^KkSX& zHSxM$i-tG*YHo>;;m4#mJ#_66GQy(stZU?N2yeA@{kyDt-3n%vS~E-j8DW}8V5ZxT-z)8>3nR! z>qUNJ>{H#biiEexfA#+KOnP&Ias!&RVSlPgAw|n!?ow#G35w~UL01~*^`x1JqXJ$r z2dYr|iKNGk`(A$my;6N{^DviQdRT9N$*t{EevaEP7Ticil7LBoz7!ug+mvHXI+#~Rxg7L1+@2jmn!4g>bx1~ zIv`)X+HO}%DpD=HP;>>PC7szp6RZuMQy;&-pdS`JxDEw$VM;%EWN+1wqpg>ODJ;II zbjJGZ17Bf1E3GN06^W~S5C@QRt0W-)j9&36z@dRoIw_rAPrxVjO|Eo98WH@Pt~4yKJ> zoE?5Lt#E8W*!09Y1&aEZb*T5#)bvdmwG?YZ0Whmt!|39)EQS=rP#VfXSM=`4=lVJn z(JIR`?^JWKf^`lh6d;NBq@V%*bTHd=IFE*3!=nuJ0;t2T_V|ATWPzJgk&GMC^0NRI4ynl#Mg|x?0JEsggqo=XFgeu94G=L7m>VEegR+Zb z%kyDbh=EAAbr;X3K?m}Yanb~d3Mv@9vK9v_&cGb$WF$M*fQ($EKLHrkSwPDNm1R;) z-kU+L=(~YP@sXucy+I)hEi=TAYnX-Atb!I^Y!R=n9RO9wt`x?{7MVgmJiO|oU1gMl zqAcn*NVE((Hf!iDFxMWH$wM7oShhR?CEy$p+J8uD@lvDJse(1yph_kr4C(^i4Tz|t zOY#IOz2*1Bw_}M$>yjZz^f>Rcij<=^Oh2InOY3RdmdUhh)|SbjGUWF4YseRAYY-Uv z3-x$sVbr2z+2CKiy^HbQxtm3BYs%Fo+`({6=y;~TD-4$j$BmX5D_5@@+GXdr>&+&$U3k& zaOm~=S=~7$KsQ$Z26V#W3YVokt)P;xZjcB9!W}B*HJ1A79*ChhdsI7rqRC}phz`uCmHET?VNb&@rTc>t{{tff5^O_H5C!e5NlJh8F_Th``1)CzF5EjSoA zdSTg@0EW&K=HwP+U@eYsDW{URAxjfksVXnmK=rtK3!kJJB*|c^RCW!o>#0~u@_FYH z=DJbqnlC?L48ZnXHzo8rm-^%3&R~sc48(Du6MRQgFZ3I<;mAfk*%es%+oAg<*T9?a zq0LhW+QdWm6xV>+Mq%t*twZ0BM9mX3cO^VfyQEiE4%co|xWRZ+Px@Q$xmU?%#FEeq zL%Yx)4vW>P=?2#B9e)CVdnr9o-j0^g<5zam?>W1KZTl*ZX6{H|p}J&r<7k|>Xj}JW zU!|;5+4gBYkh<~hhF4DCa=JkHl3Mq1Jv!0xZ{Q10HSuqdhwjx31G=QLNVNtvJ>qW1 zypqXU70r9FT=o61e^IDIbGSplRv=~eh0;d)P>82P!44V`z_Pc(3pBXo6c}?wqAa=P))R}37JLXU)LQq4Bmzs zIZG=w`oc|LXef3c2+3 z>oN8$_<>&(BH+uBn>^aom^~pnR_I8C5=}DBNQW9tQvn@_bL`Z&3xklQTP;sj$C}RG zqI!1=varDSz-bLbjM8|L&bn@!rBbsV4}E!oOZ*ittYy*^R;btUhUUU%k4p50ODl14t|)+EBru zNWJz&;HM)^37*-JCI+^WO3fot72&5zBH+jYFq0Bu?k#BoAsbqS^w=T-73|C&S8=;0 zEOxd03gp+=k7(PvQ`0#;!W5Y)C*+5IRn?doF9fuVbWW}aifhVmu7oFsRU)rxbGDh) zn=GJB0MBRkVO@vd3mbV4H~1D5Je-}pY3&XA*6|nHWnvaQ?*0lx>tMB}Rj>@GA21S! zc7$m#s|+X7nS1LxR9wY0k)+MGz^34b9Ou5FAB0)ATop|0=9S6Bi#On=m-lE_Oc71ho*Y<^^8=Kj6d4+qC z_J!3O_3MAWhjJdLa{$*7oA@^D{(vMKtF0II4XQkfbN~H;DwnWh@aF@UE}m}}#gR^z z;+Y~*N0epBj2? zW=qzeMxDuM2P;*8%e<4OfASBia>rvnQ`4OOi~9W-y%xC{zaZ zfHe~hQqIAr339baYExIvZgm-eoB|jzr=XX163kD5RBC2UD=Z!WtcI&vWYn)-Mmukk z1~=ER4^6=th%`vTWT0Kmi!Wkg8ZW2Eh$CaMOalIqkoYsL%0sgVx&uzPNFvo7NaGep zgmK(|u8wLu5zo!kL#77cKl9@?gDjw!n*9##2{Lf_OquOzSGQC#*igQPi`U8<9Xus6^=Mkj%fRB~hf z6(R1b@U*;9OQ$-A8*(uL)sds9=xndi9i zx!MyyX8bQtyet%^wdjzewmwZ!NOVwT(eDpdc0a7YQTtOMIQ9f6!y8VaiX}J~f69XP zF$bXvr9vI2vuXn~){(S6UWBp0I#_WVnjz@`)2m!5Czne|u&t8@U5km& zcb!}1P4M-os>1=+fSpk0`t`a*d}Qy($tz5C*8x%$Ye?eAvsv3J2zxB&5`%_s^97EVyf+yNZ_82bfA{bn{f;XKW4-9Z->$PdGmO1yGVhFSSMtc(}G^Hl-e`3!PqQR5zK7CcAa}6Gykw+{(`~$ zMu_=N8ulwq&ex$D`C13WuAmtlTPMt_p&1rgSJW<~8NjSYBwBa0URE7Ezht=mNggGT z&WCnGFp&b>_Rmzw#o-OKQpufWHPg6QF%`ck8gc^8$8S_0A)&nR$q-`o5jQoWxL*x zJU*V4Z(~29TGy&y^ZJs?QEg9!feDthv3SE`>fFxr06WcjT@-l#o5D3pK+~`D{ zE{*=*(oAwSEvn5{n75}^)72b$E!X4E&nrl^lEEs*5HDXDl@lP$S#Q*>AX>Aob2G!J zjtUgls&$YafI!tb6)$DS);>F}r>j`8WhjUUek~buFT}q~vLSuz7QsrT1MJn9rk1+o zbKdebOTCEIu(ER>y9>(#@=)<6pnHzh2sO*o{x+K6whOGiKAKFIi>wJIIUq9@W&?Q5 z4|}!iAh+qR43~4XeckKDX{9;=jZIVz0WBD*7HWHtSLf=H&RE8KjE6{*eMx}nVrcloL3hZ@A)x=seMk zUmC`7&RUdUFsH$f`0NCV5G#(_1}JiHipWR%XO)3ry97$PTsOf(b2jG99p+e&lS=i% z**Bpr6!LjR!!uVsq(eVq#+!BkWl;9dd+pL*=?d0e1?xW#46N7gfm{i=OKkvrFW^RIrzPeXG2B(ILhPt5 zL+mW=7W#axR;;}-`B!1|q)vv=7cT}U`4*l@m^nZ1iZ-B?2YN%ZO6THXE%n{N76q9} z<23P0`UZ5ORftgV`nwZ>app|V z=>3)(%&@9S?q7R=TJP;Hq{7>%gt(|1d08!=eiN=9h$T~kA!5XKr_3>Rpe~@|TVT)j zqo)vJT3HN-VJPY=EhHP$Z~u%3tsOci4zdYjZA9}~-ZhkkD2#+3LouLSw2f^^nQ0Dy zu~MF_2;rM|fw9?D1uxV~>KLpA{mJ(aS?hL<%_R%buV0TU|CLsU z^S{^XD7o0%+c`R$7^|8%I$7A+DjL|D{ac)qt^AWCqlNs%n(eyI>92e%Xmzz0{uBsJ zSyr5fZwO1~KFVPvK8xOH!FDw|TfRWC*OP{BRL~7y7}09p#r?W#$9TTZ)Qnt3M>e(X zb>;H8{Py&BqO}$8SF{l=BnX*u7Bo>cA(9AcJGrPmWh8C1XdPU~=5W!51&Ub#d(<60 zDS82xsfz}?%R&t!y%6P#suV&7V`Yg~0zn#U^dw^tqgg7j&`p5`$~QBsYKT*It!7aK z&ANy!jnhcdbBUq@m1*|gX2DgGi|)Zt4| zWja$hR5y%%6y4gFPx)mK#kQ6`PSfVe+1%+SkvGlAXiV1uipa{6OWQi4O9hOQe7FVmTN?db39oeBh61<9D=k`g5@Z}(PIjPj+>Oh;jbw9Lbf z0~QW#Obe&N3-W=lKRT7{wR?c~l%y=k^dtbXR;L2Bp`VVO;Zo2C-(h4ZOqiw)=>`Rb zpQIw&+nX>gSH2UOygb$0Egov*P(dAI)uHN|iO%SqFY!I7EZPf}$7FIMyiB1%XR=FZw_rZ0kUoPt z;S!wUkrJY(&~xX7SSUni6w1J-)W&*2LpK6an?mdee&P9Ur5K90ZCf`r& zml{?kblh(IPQAQVUz)zgnmT)WTqTTpgGJ( zk38yh0M6M*nxS5jSJ;c(})3=+}cZBM<&`V?b16?4M&6xW0O=D=z z)mX=33d`EK=jH?E*FQl=s~K>SCO>%yEuW$FpjQUfgx8K_o9k3tIUwq`S~3@eD7)h#a5t;2MZZaS$me+3}`|00Wi zkEx=6c|ez*j@rEz9*!&a$*0+J%yzm5c_tSGiPKvTAzea{^1+-+9eoC&!qwB+QRl$L z&iyM>h98~7|M{nkX+JiA|Gd14KWErEn$a298yK0J&{_TL=o!!%SzDOcIy=!B7~5Fb z(*0k$Mi~=l17ibc0~Pz9ZxdNNV-pEuc}F`}3u6<CKu5>gh=HNdq&JIsCn8f6`d$j4<+1VbZ zPwiXnH+3ff{4Vj5y1V#x$ZwxfCKMrEzs zJy!R;t*pWALp#RE&Awo z5^7Cge`0S}+(!r|geMx?8mE2AkA;jhlgH^Fl!G^q3H;W`DAs}N4f&q`*jPa2_NhDQ z?6KkC0ta?&NI+42LFGJEJsV}`%Twb0x_G~cH0>8B%+yK&58M}w;a$HV($4J> z6YlQ0Ijt3TNj_b=BaWPT!B3LauNlk9V|EJjLfGLsV`qd;tRK{3@sjI zR5aorH_BDqMYV)e7c@aJh&$kz#L6Q)xeI7oAfppaNVf+avv9~K$QQ6+%n|pZz!!p* zzA5*Q)xS`iuSD_34#oLjP8eMO{T=-Sy)(5i6R~x6^dSD%v9gE#e=Pr2|A>*}kxIRG z)hH?`z$cFbq#;My(G<>8uCCHChANq(lhQahT+5ip`~>>Kt&YHq37rugdY)mJ-n2y~ zWGLA<%*twKaxy#K-f-j7`vYQ+xdv}6ZP^x00a6HQ%Ir)uMqgPVRyd^bBwl`M)Ll@J z`&tnRaBM|MIB9_rG`XSz%`j7rZpx}GoNiYZ&R~X|hL|)osXg44oRCK%wOye#%G+@x zKD&@}l9VXoWi+rBZ$C|*4CV0No!xUWc(YddeCghO%BgEYWLsO+soRB{c~5yHmcZwM znB+Ii9J9!L1gE(c;(S~Y%+HyaJZr7PgcfcxU~FW+tewT6ShavkM;2o-@jGuCX^Rof zltRVWVqIN2;qK!q^a6snE=tAr%#eB69hE~vGoPXvqvpi8;$lLU!-@`VtRVdF&%d^p z)tmCw9f)jD4OUC8JwisP4`8)m6?f@qH%!pp9N3Y1J#`FN`Pm5j$hPHZr6+n3~5J7@V9A3#r^|8xkkyrI6K0HNRm_yh0*^g>Alp}G)Wt}Rk4 z^m^1D$~Rx;)*IxLM=WG|`8lFrJ))N8?-Jpq$*Wh9m(&CdEV6dZnP2#tC7kU<{%tcS zzPVuDu`k@G5Aibtykb7F3}Kz_$4MHZ;3M|fh{NKKNDrk;_&j0@q=0hb65&XoL+f7m zd;tzS-^>}oDpsjtx&BzW%j0w(2;{?tT;ya6x`YS`;=o$jiGx}G?RRv9p;4`A4^^c?tID4mr(n5k zcC>_fuhLGF1`8i`jSr8`7S6|n)tbTQ`Q-UzXoC0Ur{XPu(sHiIHBZT9h@l(ZrMlk5 zTE4}By90`|um#D1|KAVJ{|A@y z|8On-n@CyTys-RMF#{PG7~XMe?Odps^p+=&T;=S?HH?`pAxWxq+o%me`|*oUvJ0n@ zN?|d0Gt-Nm<5@sgH#Y~s+NeAn+LUL~BMoizimF;$2EVa>4Rv&RDj7M=nv!PbcNx(Y ziHo4P&^vCx_E)+u{L z5l=Je+0Y43Df%iBd6TkQq7*gNd2SIbSA8RL+unm;agD>h;RG>jJelR}%sAWSInAR) zo@0V}DdC!G{XPb^r44p5FkBSi>p?ffyQCY4BusU2br|x#9yim{dg{Qz;@T!HnBu} zF#&VcV&P!j(Y;2QQhg?eYbo0h|LoF0 zQr)mEe_9B#pKJS{w-JK>lk4ha{bDs%o#L)eg5IkNv9X@>%+w-P%j86 zz#IBI`>n$$eRPs4tLbTO&J;%11!E%gfv|@I&pEHx2$NhH<71nxn(Fj z#Z;h@h#|#mWRBXPNKH`-OKFvS#?GiFdh$4z1qG2*oQy@rettv6;v>m`c?oKUwUPGB zd9A6Mg$)cuCq-NfQ(U$WJrx$wVf9bq{40y!o1hiso)f3LODzrDXju1L@{GT+S5T+ zfPmRqpMDMUVc;0jXg!mO5e;vfa3V3~et_ z-q&G21^3H!)2^Uq<_YVxxt=)9L3Zk(i#X9(c<^Gyb1bF1B=U71v>8bjJnKE)3Q&Hc zLSXN{4EM1k&(^m?@6j{*0mZ@VmhB*pWhy=Z;W=y^RhZpS(s=gQCND73$r2d3>vD=u ziGRiGaFv%>I|E)hiRCJ6|K=HTIZcfEgz9gd|DobEhNPgq#k$iJUeU;1Rf@i$r)-B& zuFGnH{&wAxA741Q86M;uxSSq!5>tFcuhJ0FvXmLUW(GN+D8!j{064ymJ#t+d2@n!E5%?; zupc)iCu1VlEy$E1i>gSz(bpp%>n$)J97549F^|Er2XSIR&`9;ylXnZ1ZESD|ls)MeB&&^AqZ6b;r+ocflIY}S%`td&MUF!DN_TDhp9W8@b zYw)wUdo32^_Q^0qm)<1rZYUZaGBn@eu!Hw16dEpKCmt#vp3?yWH>H7iKLp#jgA{^n zi*Uc(jAIEw>ut)ozz>Pz)m%WoUwUSm7jjCE+U-7bT^@xok^j>r(|6uFCbgkRvqPW#_3)!P{5IdG}Y`z{;^x z6PMCftB!RHsK>Gd9Z9)(wXQ2seu!%Y!VGs;RGnjgR1#(reY{2W>N34E7>hS`%aK6R zN-i>${=M5eWG1plvL6=$%Bv*3xcaeHj!_%b4{NWCek`L3IK#FAA$y1p)SWs8+=W6 znM@+#XP57i^u|KTGsYY$k)S%G>nFjeO-GGrMxZ2f1!G&RF&*bYHCZx8QqPeEzhUAg z;q1VANQp95e<5AS9axPsTYEL=0}*lScxWfnR;mp`Vtmk z$Y|ArX%&io>Jc@G;&MlzJ#|+xW4<28ibo{w*hKdm%y9HDVKx2iS=|9eO^9pR@gxli z`E$qZ#(LVhJ_Onf?&h{Wrm!V~$>}nZy^fG)GyrLwo10}nC0~HM$$_WQ@j@$Ywx!sAN-1(Fb^0S` zFT?jMRUv^Xx+?Fob~v(-MQ!0Sfet+q7AqP1oWPYjMxjPz&_tptdxagr11imGl)PFe zF98-+a5U3Oi!DpqLUhEa6X&&<7wl7GWsX7S^W|HcMXL#&2nE=H5@!7gFbdloK0-9f?mjt$guzcfeh>^?Jo`SacP=f2#`7#`6v zenpxYf57-X?^@`7hJgWKd=K^ze`pOiy36+a8FR;dkGlhW9|$I`XTqz-eY2;&vXe#J z8;_HvN`okm<`7Dh5K^X$(kMaX+{JVMi7)Z6kC85B)**$PiXW3=YS*1$jxt3$Z{(1O z5snsLoH1yHpSMV(5tY8N>E_Jibc=02<7lKQ0r66?jg#Vvi8QCCmnWdS`iTxWp4Co2 zR!En><4!+b0PGK-80?mYD%UO$VN{tlOiz(-mp)M{mR6}kqA4~Bra4KuVSEktc()I! zb7+@dB9>AnQmRG?;zaOA;lA^-Z^CsCL)EtyXE{v&&SYHx*?*rLRl_)aZkyxRHt{6A!JgcPN2UZw za7EM^CGpB!9z?E>A7yqS#F3UwJsl55hfVc1=U>W%E>V@?rFc623qX@DVv9!Ib9Yxc%X~Rd#+}Gl3vG(naY}w+z2EqI0z?lEzL3d;GK??uC=;6R)K;I@~%0+IytSpLyI7k%5MB=rFon3>PTjP+){FaZL$PgG3}wDgft?lh ziknI)oHewSLlV@Zu$frdxO0yjRZ@SWNWjb7o&?#h{Da5TEvo;PY}u$bA(B4Q`)cNP z_SBY6ryDDa-qKq0MMX-@R`$kFX3GEK>>b-X{l0A9s@VRYN+fFLB zZC0}L>)qFNx=-)(@80Lx{RZx})*NHZ&!B$Q&syOs{@fa0t`YBfGGV4a{eh%lXZkmg zNp#av=Ty<1iG6^9$w4}DZpc{htsSz-6sc)^QS_3rdI*1=yIV<36efW2ZI*5yuy=T`wI>+QI2ohW6}mbTk2R}t?$>v?yN;#SM>LG8rs}~@ zaMQ!BrVN{0A84?-a@4~!iuE;2#%&T9uhiSO&~&ouybzeWvmEWQO1THgV7qx@xEjTf zI0qMr>c(Rln$Xq!vD6+$dZ9fpb)bkL6pknlk#~e*++{BQSt6evl91{PmCcxRY6E&E-=*}`wo{js(&fWo7FWi0pDRi)!kOB5F9b+wA$Z# zL-9B*d}DU!@eZ3~qk8u61?|(rm9VofLO?~`OzJbS+qGi=GnFIGsVf6stb2JHemYI}eO^u0f^*1L_N{iEzE)TMrW5A!n(!9o>;!KwQ`m z5pskW>5*{pl0c%22eE7!Q;~rOO^(3&Xs!=j(gme0Qsxis=`DabHCk;svIhAuCKtGz zffDaZrRGHOLH<&o5t-?2YOiBk5mV)A5?r!fD7a?}@=5qvp(DN3Md`J8xTlEa;zWyM z#8exdatCCMgShR{t;vVllvcTYCM@;Q!V!B8>yS2{Z{!LM&9I%u;5AglDdAaeMBC_Q z-+Rr@v)#cXn*&MrLRuFIuU7?A2fW?Ddey4fjRN<{WVW;E^X|k;c*7Hm*(KHsY4_v5 zQ6M-v89c4N`$2rw3%SSRmmxqEv44c6Y=v^ z_)*Fh$s+)Xk}CulW4-?%9}qUyEH4e8yIei4tawTctG;nb8+=8-1my6nd%O~A18aqK z)14fjub-=)-;X|Dcb@rvH13ojSTYc&rwBWV3ZM@_x$c@otFh~<^xmfXY|os zp2KiW;cr;5SP#cYF5yZxZLixm(2j4*Mm=!8 zld3QOeo^S#Uq=>Mcs0vxtI@t-Vp(00Q2t9~Jop-8fwVETOrzjCj87o49-S1Sz^7K+ zd{^}s0d>DB@8e{qSdr(i2i8-0hWi^~1AI9a%ODka+LAd|O*K^Npd{0)b4&ts& zzM15uq3J_Ij}(wN)0`*f@C*ax67{V+YAZ8xAvGzLW^X?_C3|$z*nDIs#dz7RG?07% zj(d3$u{k*q-%zi)vXGcsxI=&Ra0G()5Y=pH$VTCvuB9!~kVr^v!*GN@?QBt22lTl` zw`LcRbOI$gD~NC9X6~X4L>>Q?unv|WYtul8I10Ew&N@6vG}7dQ_gAi%4po;kT%oM+DR=E5)y}Ft z%4!8p+VvzDEYnQ~WhW)$@0UV!IIH%tyV{VKdroB89`J_zEdj3~d+WHk>US-?LLD9( zJFm(uhAlmF;;u6wXCIp2Fy+7;ptoxkZKv!Vajm>D_)M8z+fm4nED;4mb2#s;KniHn za=omOh`{Efzwr9gDW<@Ct*Ky|lQlviXOS%vQXWo+H4;O$+b&MdG&ruDX1JYMmJ0J$ z5AZecp>erKCCIy(NZ-rYfBV{z5CGj8jSC&=dZ#j5JzV&|$r>h}9GY2JPx#0*qEl?M7K;9C0yC9AGJlgL$Aovs*g(VFOL0^r$~6zFD0anC|VC zjCaKP%tda|A1N~kxExw6TAI|^f&{9tY)ER=UZQ~xM~jMpVjMWp-|F-y$V+*-umDhL zNjkAtxnd)7?w9Ifz^(;m(Wyye@>{$4fK9DAyE~RuzJV`RxA{P{&2BHwi{0E4Cby7H zY-q0xHeZxY= z4KWideC*WW_T}7@kFzus39+0|L50(Vy=3xZGX-&ShVVIpTs^;eeGv;jkcMAOJo$9v(s4-2o^#Wz zXZbN(lsfRL8kfa=u;9d{JeWMaPI?9A+4$+^gieSnW)lD*b0WJhc(IJ}3o0*05v9 znc^u zjODuf9{YCKXDJxCp(FgOyX5~uGXGD- zE&s&~k;P&_;gJ;#mKO5k#}hCVP|0hCHU*~2hXAPxL}^m=ukT@E*iFXZs?QSlMy-(4 zc>sP>2+bh4EVmRfns_eScfxy`dB5iSfo(`83Rp+f6?QL^zpmY#RVnTE;!`foT8&dx zzpk6hDG@2(Bq?eW*5t`h;3Xb$`h{2-Wc38KneDP4NSdf~eh^%3OFrhfO!^Wi3Yu}C z{XXeX{_Yv?B+A3ZYj)ft4WzXn1Hc5v#ez~I%S`wcmsQNmKHk6QY1Ve2BY_8hv1sy! zJmckgulCWWmL4bA!N=kU&0{>n7^Y-oor{F9+thzHk~U>#Jq$GkZPds$G3G^6!1*fF z)J$F}al$6%XyEUvmUt?Vo9G1BV)qLXmrY?HT+l477yy^ex({LFad=3n#{NbJbdg7h z=h~fUeX47$(^>f7mju6^do@^!kEB5t(4h`k^#;lHQ+I})kyJ*uD)Nnf1of42mXf7@ z0@F2c>bdWgx2CRH(qGfeyas6(4>9aahvvNIU{bY!S=H>m`?Q#8g`^&TE>vrqN z?^kvwcrWP(O(1!&)m(63WE?^{J@(P?E&{23AOQi1soGLsuo5`hDLqhX`9Q;MCVg5C zohco}ZjgIist(QmkpClzi#tVi*+7$f+KV>X{$Z1OKb5gIUcVvC$_^Mqx1zT$32zOY z!#j)1pMVu8JYBNHPTgTF%bQ`$PKrQ)djtL^IjbE~r(N8wDu!KxJWsmoLNlp>$wvK% zp{1luq*WcHi?d)9Nu}{Tqfy6D{)o|etUOm~Oj6NfDB8kmN7tCr?H;v*1 zS<5Hcb;%MiQ8An;mnTcvHTzR5rM$PY#mcaAs=L2m{-wPo1T0kN9kd3yodF`lYm`$Z zm9W9piia>QS-0j!8W@|#*wRb(cQj9=N?=1BGdh$3?Rn`&bp%p)xAn4rulE$@MUyPi zkyKk$!%s+(9FiN0&@CO^g>CZ2lA%ec?P#P~vh&5o`>|z+qXO?lBNn9k30r<(=g9ue zM}>x!G@m35T_`vUW))P#Rnm47maw59RMAG+TYL75fJCbBG#JwfH-SM>(U|arR7;tuxU&?WOzbC%?^Yx}p|(QWkOSEGG^Gt7^=e^>prAxnuuppCwO}=V72ktebx zdL4*rmF{!!7VgVxl^SmJM{d;`j`UApUkY6~cr_;i18f9%nQWBo7`?a)(eTcN%0acs zQMBUaB;R6y<_rNt@rHntOwvrcgXW9~F?Q$fM7$s&tM{ec0zmbK2CQ)b$;JLPc_D{s z5f`~u$n`iDo9J`u2b;c-qRNO$w!%nht)j!i`b5citD~hRVjB)o1qSM3AV$^UEy5_? zINJz0c9buu-BmkWFV+6ny9S`!Bk(962qh$yqa1Tq=xeE#&TB@@ChePI$eQCl49T8j zNet&2Q)^+BvGl)04nog_QvrxeE=|VcOQOOLzY2FoT4nm=>^0H9$^vb^R*R+!N87mQ zz15{+QKmslQ|8O5)($?9y7-4@Bt7kEHKx4sn{3DfbN12p>O;{w792=LYFl<~WGr2CR(3J7}czunvnL4Q7^4qkpYEE90>`Ldk zJXFGdH)cs7-MR;^M5aq(Oor<%4B(U(JQhv`=3Hk`cC2gN6>)ZUSEXeMmIVR>a2fT4 zibg8w#ED#OWD1{ihYeF#){;|FJ5Jg}+xz!c_hOJ0PV+a0l+G?B$Gs?gBmS!P7n$gSCGk0@B=L&t z+E>H_okd8sr=#`VxzlnORYcfil-`NrqgRtuqd^|0KuIPicpe1y#MX8{T4$0V<(QJH z5MA;W-%S}8ek9P6irkUtxKVy@gt4B?ts*ZDVX6s>5?XEGBlYRHC315aMvKk_AcEurcG3)e)ibXS}eH)v&0mXB!sa@SCf3d^sSFn+hX zpx&%#%s}JGlTsMIM)|<~rAQz67il?5OG#}uXd-psc#Q-A6N}f>o=I%$GPWT(te0lzFp)0akcu}c#$3?*%SyL8ohbOI@g)<-3`kE_{v%~K z%;t@BhIZZc$QG@^T>hEUh6UL#jc{K9l8TBGy<=+iwKnsT7wY#6^=LAg6ZcVOy8czeF zc};Ydw@jyLhea{k4ig!-&ZX_K%o7#fW+7 z*Vv!>;}3^f+Q)4@q-1Wq44YFQg|ZzbC9y6`(~XtE0i|{x^qLSGbeq19TR^XKX`_3U z_AsNI!*EKqK8KFP(u2>rF%2snnf30<&ksG@V87^+`n| zvr?~}PMK|S1%oEu2t_A@Cb4CEY}xh`VKb6=r=TX4oZ7uFt}~uuPL|!5SYZF!GWzlq zN7@48u`3Y9J}Fx1m<`=zhj*YB!Yi1S8~;(gqf%jn0QO`eupts{``~V${%5Sg|3hc7 zo{BD+*M!Z?K@n5_5#Bm^j;!F1h(0QV{*WcHWi4Z6Qdiz(6BKsy)w zGQEx`rC6RX9E)vAX(A6r!2=>v8ald751wSB4`$ro5qtB?bPQ_v9a78 zdg@R|>WEjGV@RqdrjljBGv5_QA>HjPiU$1|31MeiPNtzN2_l?(12DTdl>=Rg|Ks^r zbP*#Qk7$4Z_mot1$vy@~rE;`a*N+(k2peq$od~nNEcfMd%}#h^cfOStr_O+Vyc@KS zxW`VOOLh2iEshB-#5N?2eCTQl$%_7l*ER#?zxg@}^jkj*jkTin zBqBbNFAL2atB-5k`^z8_<|6A&6vM{c_YU6?Bgu{qzjLA$-$gniVK?CW&{&3Ag;M<# zg(;3$$)|FpxJp#oM?Qlj9?&_QmM{Gq+9)O(aGO2;_6o}3kGO$8D>ppr6y)gm`QSBW zTCd?SEoW)VIvHLL%}Q|vnIheX<@@Ve%jG(CkQT!Z+IsfVA_K^R>Fcgi>qrtaoY99< z$-+g33MOe^7cu7DL|HE06Iy7+B8LYT@t40i8o&A_aO`%FagObEM?kd~9UyDYLwD<= zzv<5YST*)en7k_t{&eOaYhD!sC!>CXchqGi=hV=g;kAHFTf4oia-DIlZ2vr2{@a0b zrXnNY4DZB~t6(E=XhI&X!Q)=?7J)U3OIf&)H8hcSZJhnqvb;+Dw=WjWY2r({R{htz zCy0mHS#hGNNl1(GH`lT`#_-N%179vV=W9QgJ`-gdt;F)>dCq~Umc6=+oi|NR-9or~ zYOIjpv?>|h`9TxZ7e(2jhN?VRu4{NZ$oCxQ+_4Obag&L>ud2A0xh{@&$ta3c>xk`N zy9~EzaA-b@Sv*@jUYTAWNuoe0rxEiqc-R1iEw1_ePEW=8CkY8?aYmS+<$D>o>$V@otYV{5d&gWPs#77p|^krOgUaQmQXCr0N`{%V9jDsLOw13&hRxmddyC-}Nf9S@DXaOQE_#f?(3zQIF`Iji!2_fq>VW4=G`28K+9xKqJ>d5a+0~j&O15CgMqav^u#4lhOA2^m#Wq%qq zHW4MpD5h4Kl(;^gNy9Yag@`2z=9=l;^lIe3h}N){QPkdb<4XbYbCu8Gz+fy4T93+A zf3Z7KKg3Hm=Nizo$hu<2bDlTjsjwc|WZ$6+by)x|F$yhsXr2#&t`pOcftccvoBf{z5FwE&i`(~edR4scZ*bV%x zI0a<)7DP6YJJi2~g*_o7shw+o>HazA09$c9e&7850ze3z54Rz)=mP==G|1F2GrNN6F@X`@8otIr}1&i#_APv%cg zB&L5O?*^SN4dwIxf!Bv&hV27C(qPfmyQ3dxZ2Fwpu-$f*y&1Fp-3&qhyTgIlzS}QY z85@&!a4sssp>U3{r;n}H>M-*o(6pE7n^kVaX6R7WMcLxk zYm}JRc80a3v!99gmigAM7#mSRp9AtIWDKU`KY?d-TBLUw%$1^vI{l}7^bqXJw^9{< z)k&w7Cs9t##$BxrRcq09MAIfgY_Ox*8<_;F_4lf18;~#Q<+c~h1hJ@On;pg)oot7I z2ESx>9AOyt$CKEtLY`_JoofpriLqb{Bou2?M4c zZ2d2By~O|uOhjc3%223^$L1=@xlD@}f>cvBfpW7(9{$9arM^*v@Pm7N|EAK!yel|wwsmJ>9Z-RmkBbE;$zCe z6xY|tGvC(N;qDi1HyVG2Iz~TdXCsu=Z9PIpiW*U%n(}^g#bu!s@!A`T~#fTT6Q%<&<&mU@|d`HOfc7R}UpD6z6 za;X*AZTzSJ>Z*L$aDyfT_-<67?J?FL5;O#W4QYVEiz*<0r(8&G_04gQp>pT%BNH?q zCabui;6^dLx8V4Y21#n`3o2O5_j z9{b~|ncM7D!&*JW6df1&Y+mN-SFUUHXYruEcPgmjyvsn5DP&)#xB&j#)vLt>exxZe z8GUZQU~RS(RZiW=C>f(i9ImJ{ z`tO*d*&se?MGQ$4*~srJiKMNf5+;d|`b9LP&6IRvZ>xtgxIz#r_G%KQd5W|ADWwg< zMh&@DPeG>#0XS|(ougQiT-UT>TQ|}sXHDGhj+Yzc@=CFx<(fP~WzX^=#pJZ*497b& zoH7HoVdqGOt{HJG<~7oVMr;|v#N^5lEY!neQF4JK*H(omTK3T6c29cYs=atD=1a_00aiZfG6llKP}j8ga1;+96h z0h&s24>HG)nYdF%i)I)BBzNIEDok{C>&fRx?IXW`)_DEot5MdTXxN`L9ij%YWb-=^(1DB^#l z_{1c9~BaBcfyKxrFrzvh*?Nyem7!_In(m;x|~PnZ2@3*6LCnmOase)sUj4 z*6{hxFHyWy^B*QVP;tn*p|~TcTqC_=aXI0Uz9v$77## zC?ASLH8)nEJqov4AJO5cxhTWe61(sQ+7)}27rS$O!46^EZ)kvDL)*&M1KXgVw*_We*3;ZH2f*H(s@ zq%g2i0TBtJL|IiHFP01hNk#!HwlPzzByI>xcXNtH*=LTcvjGEPYReuSh4tVdsj!W0>VoXPq-m11OQEhljf=-S)rwd(Ww>T z9w$%{o|3$Lk;mdRs1Vk?7zz{09xx*JtP6kg1pv?{4WXjN*b!j|Wk5D$cZ|k`2fw#D zYSrZIDdQWQ(Ejo}QDYVq-+X2{SN2b2@-pHOeygsPfk}~ebv6^SREA-_!6PZa>P(`C z`?d2`c%CjLFCL?1PyXVr&(xHElwQgq!xjeTH;PigrTT^r{)WfCt+RNW~8!7#U~3EBnc>S;!5HpXK^*{69r81X%2ND#u}(7`k&0d zp~xZaum(6dk)z^oSn)c7Z_bGz?F+1vDe}Ws^h1)D$%4@Sc=fl=5DKsz-p7LmG394u zaQB?h4ZWbFn0f)|$Zt6CB;*3yijFLxN7jtjF%QEAaAM5Wpl?A6_9 z=gVA4xNHr^oCX-t5{nqER}vwfHAsJhzKXfU{8?_QpSHETN`R`4ox&*mmA?|`jWy;> zfsnHsbz&yuFawfiLrvgd5F+`!&vpWH>W0>xc)OYRXN~e!aaw>xH=r}?Qc3C38T^nh zNzQuCh~s|ssH`GuQo2hT^)h^C!1T59fr8vg>T=*zJ;LROI{4TMXwR_|N-x;rO$Q=c zZBJOGF#Rya;zXwybiFAjE6UVsg34?oPIxd1?OZcL%81uLTt)ZPpCvFf7Y!;=ZC z{)5)o4y#>U$gv|5L*T!8)`+lt=eV%^4jnrVjB|DW)s5`{opk zt1H<3P5#0Hz~`K|KMUX+w`7lOlwHtj05 zIxcJGiJK2`KZ*ZX88yNPlEH@OJjQ|q(@P(oiRa~X$KNB^eL*~XS%Dotc`|&*HYm|m zV!6YejS!hhr$sXpZj;pHXxuKbC|)1KJe(PWUZKjaENZi>%5evy-ur#FM9n1@0FG$^5@_4YUf3Vbc7G@`=1J2RSxc-}$YSsFVNK@>h zlD!|O4TTS?E6xj=#!H-2ok}O~^o%(8rUjRKNT9qKw)_`jtdAgbY)0dCcJT1D0Xmi= z)XA|A&q1aw%$f^*GE3S7$0OWjmy-fUjm;3Rx`ch+odyDXh!Dh_40MJ+7m45#H%ahK z$z&_h-%Jr+H@F*DNcy+p$TE@oDqq<|8~AMUieA!+o)5zDVQqQImmj;@Y{yxun_N*X z4fb)Z)sU0U1<;-7vxn}9meX`0!}$rNmE=)0i%0s*Sh{nx-Td#)S)crK@BBV>Dae)4 z66DEw$Ty2dY&!er9{P+h-F`c^FI7jBfq>S~lsQAgEwswLjR1Gn5xRc2n>~Qa3$n_W zQ>|oUIQzXguTK>Zbctcs7I(DKVS*|)pRQI-%qFihkd{Qg9kdK_U?qd0{E;Z zwlb;n9SjVykOCO-H(P^%3PtK58DSYAu-BF0h^IeEwkM<2xF#))^KZ-KSR^z`UsqK z5puIm?rPYLb3Nd1J#Et;Qd_Do(Wj&k$bi@9@!E->Q9|S{%FBl>f|adu6GzU;ur1^& zj50C$_*)=i#}K4K;be5eLI{(YE${cSu@MEi=vWNRu_V+oinbvHUCKo~3A$^EG*!w0 zXtoC8m`Zo&cmf7f4qMcL#j9h#2J7%_ckUs~)s;tH63>2Fgm)B~RC6)e%uT=h0?+ZJ zf3kJ_FGyqbHX=p={x2F2ByJksTc4FG@8(|Cc>lJM91t3aYn)#;K zs=qcuB74e8)KT)JA2mU^EfH-w(j*zmX<|ae0PR?$u25?0+gR44Nc8z=Bcc65zGbD3 zinLCt>6l0}sOD(kga)oU>bwrfGucmMOAa~FU*JhMfS%a#tXtc+?#^9!I(^?h94m4n zO3`L+s!Zs{fo7eljQ7mG`{=>S3FZyZUcq=8){43@x1z#&TZ=nZn|Fo^<;w~_oxo6t zJ%Q{41bcU~24t9-R$y#s*ZV=kz`vKpBUuT$HFQ1+#*>qm2xE{BBvWc0t5V;`ql7OP z;(eSd*{AJZ--2JC^bK_hD2kIPXB{tSY{_}d{`$QucwcE(ZSHf$96#0;c!7yT?B1cH zoBMm-z5~4Ys{U+y=H?^#cN69mDx@&lWPB1L8MBALMfZxENe=VCESDamH4PnVQ@&_0 zDa=4)+kjr*2nOMTRdIJQ2FJYNGJPOR*}b8HygjZRRL(nVd_(*P;|xT5_k4Qws@mHG z*og8)ADMC|9s{6bwq_@Rk~c_>=|Kfz`mBA_!KZ&55pp2A8oR|NNd&rCwXJZgqg@1}dW+dzviJV- zlf#PUSvk@`dkDUWI;LwvFc?T_&YIRo!Pwl~DZseczdZi70maldL;2-1boWn(6vtcP z(4oL-X_*T77*nxQudES6*beqHl~ix zv)V3iZ%0E>cwtX}$X-W95RNmJt|p>ro34SnWf@Y9>!PL#iOUmw$}459?xCCZqu^yFVMtvOOq>Q;+A3X1JfNf14Pb}Za@&ZV#`eW%!J!-Cs~qM zUp{R84;ukpi!n+y!r!~!9bk6;u%uhU`t~O>Altcl_+X`%0-)Tkt*uCGAG5BU-6aTpkk$j80VA;LH6djFA=oIBV!P3iFP^wXzbIq5k6Xg( z4$`Gzl8liS3u`)Ec|a_+I*M& zTt`_hLny=G_fiWi=OHzFPbFFf*0!TYZrC-djQzCvcB@iQ{AKZp^sn{R`y66sjotWl z0gbXqo*C4mfmxWOy05k&zp6|^wX|3aVRFW$$e9L zwjjd=drzkjj8as{);PBWl>5fSKEwF29P*_W_8;=e6s5~&ZDkUwXGc%5Qb^(mPfd7%P2eTLZn!gpe zG}M3fQ1~AttN(*j_n%7ViaU1d96y-vSQ zw>@9~`t|GQ4pes(L3kUlu)PlTz2U3+2`b7)r~#rBlLDs0)my;ot#m5Pf^8RU|E{5xJr6@96B`phdMskmE;H78wDN4YQLH@wZRT z8nB@GOnTwx)|T&KS#dJ1-wjjZn{F*TwG`!5jDP6u)|3K@H1H=N{W1e!H1Qw}Y5G5ck= zB3)tK3WL09kbsk7;UGDbLLL^xxtt@@*)9?x_!_&b%{u3i0JN||$*iq-13NJPWkhSv zx*2g&y$gPcKf7|oDnGxI39HPq-I%T%d#oIDdd?FAT+;|DmP-k~QI3Jd1w^|YO*UyL zJH*TwNs9LbAwGbyyHswl;Ka1KZ*kJ?Hq|Y^6ET*QF!h=+xzKgB4*99JUCM=CLdGo_ z(-GL3YOyvnqz)cWno$TOO7tsk+3lo8Fxw!W=+sRAbP`eUbP%!dA=Mk?l>$T1J!N^W z*8-c7HV^*V=m#?TFt~e6qs6@958}~ieX`#gwaBx1`eeN(^U?BwV2z@R?m-JZ1P@lw zlt|3N1103HJ+#TajQy%XClFFpw3whegn!Wg=El6C>aYc#ndtMzw|W)Ts0Osq9&#m z@0DZ8sSrJ)%_WdL08;hhkLW%_iu_`?=yd~dlD5qX@#YHoO`K&)hW)Hx;M0lO0#VN^ zVaVaKhUVqbeJ}Dt1WOLAxONwZoYSyHqv|8}X7E>yKd0G#lAJ}}r1y!*^jQ7W;*Wf4 zAm14`-u|~G4z!7+Bd~ABY#riX9W~tl{Y>(|W10U(!TQEjI2-)u&2(iexdnX`->uDY z(YEkj6gmh&w#0BCeE4lZ@mf+xIvF zCMOd(ca$qWa;a~qeAD!UZX&CDcT7T6uji7}uH&41M?=6ue0xPi)o7QJL(LB>-IoqL zR!{?Xy5c^YcY$gX+Ajl47SkjG*3(w5A=hofh3(O!2(r5MwBxMV{7lh zg>=;WZF&^w(^9(hV@#Cz>^DrYhrhs#-cUv3dC&>^C8O0|=Pq`<32%>vtL7Jz3ThXbKU49W_@DtWz?AhL10!296*KmbC>37;;Z8; zy*#JyU=vvV=R{evs4 zub=ak1-n^7e)w)-zbn}t(LZ6KUkh5GK?TQOl%+$G1!cO zn>d&$yqOuIrdI{c8mi=_Usn~Y4ULLC>!7-noz-_JS<1?)s;O!*+Y<2B#g;MEL;xxA zm!(H<>s9BvW9!)zkJsTV;0J0$gLf;$HOdt3+(uXaAC#Sm}wGv!TK zQrDlE+is-N)+Uha5pdyqfoOP&n|*#r+kp@c-uztY-sIf^!$YI|*Va^DL4F^_zRMS7 z$gAEg>>N}t9VpX%CjWIajw?lZzZoZNu1cgJ?4UjFoG z9-b$^O;3Oh7r{yorP1!tU0wjTn>gJFTTitXLJ#qyXZ)6h;kDhon;_kevh@c%K|8;$<*-ai_I?M9r4ym0buBX2RH?y2BLgnm1y}?K z%ZYkS;IPb=N?_3lSASKs%`n&5a&(HQeXg|2E3+3SXGTj}-vWOiMsX$EzNiyt^HMF_ zsTPeUg-%ZB$+GDt>kxOx2_mPdI=AiZOiyg0wlqkUDGzBG`~qYE63auWh(9wTd~>og z9-eX7TbM=EZe*y@helq?o zrF}fitM^b*8$}#55r-xS-#RY8+*S1-8ZI>hC9pr85^_lXGYm$egqPwbEb*>1@wP=* zCooo`##l^>6kP-8e~JAO7%1>AKsyqAvgH{VK`B@uT_*J7QsCHL4?;1pWfI#x4c=A7 zVlMDG4t|nbIeEwIzb8gfxVfC&mWuesNh+S@FX+(M?>bJ`dRvXxJ%%oXkPKLOZcU0V z+l09hpNx788Pk&%LZ?kJR0KhQlde zXxOQENh?AdvB;(3119EQbO_!OQ5AcLRB?nQ7L1wG!ioE2l)m9PW#+w-fC>A$@I&=H zLjW#GfSjZv;-GK!9@-1ZNR9FbW{kq%!}=8x&yvKG(k;8Mkmu#LISV#GZl@(tQ~3if zrp#TDe-bAnOXUMsPQg&|7My#k_A+TKhVnDiO!))y7wYkAM7WuQ_K@B!_QuK96;=NdapB_f3z%XDRuL0lRuz*X_G$aa zFLtx?%E;CR3xBl(K&zlKYnHQc2~7#%jk99>_%!jhA(JpNf^Kv8l=3Pych#O^BSR+N zXTPJfL@)u1JPxI#-YQL&xB>_HlSwe$We%I-ZWY(wJiA?_8<>utPz3R`DHAovCdvc? z?(r?UsU{I8)PUbCIv!p?YUG6{ZJ4r7x0Z1v@u=5AGC7{@2cLU-SVsdru_lWNd&Zm8 zLsLmR#fVmN3S7%iomEpy;3b~u%;WOJ3`+SASfgD81{%br??|wLch{r!^6V~8 zJ}bDGlwSuNFX3S;@Pr4X61cB<#FRP9Rzk>J#$O^*CE7e3iKEna4tu`i1T7XMXsgR? zHBe2_$5V_~SnhL3f>6!6W}Ju$NZ^osCwt%|zOyEP3nRcq#~BnY+4B)3m*x0_O1>DO z^Tp0ydOBt>l^jt@%wsGgmsAu>o2O|h-l|Hl;qjO{A$_C{BGDcthTK*u+Bx%!h6TtgHfI3k;uS0XtP!bwV=6 z94L|rKyy1)>txDo#LKw(f9qu0NL*w1mZHlMT9F z6!?+SgGiZy9f?PoI4t|X`Vk6N42Yl(O92_gV1N!{Ni#AjGN~1 zcllU>+n*PgK{3lorfx+C=!>|See&m!?w+{{BEd9<%t5>8A5B|lzu5xHc*tpbZP?ed z9`hr`r4#mHil1{k5o~;Zo1r2YYJf2fa@(UYdC^z=u+bs2t2rCGcsj$)9GZ=4U}7(+ zLIYf?Y^FNFLteyesEpcyEGj6`fZF&?)2dB*qAwcJx}1 z4($ASLOSE%)a}hgV@Pu4GB92GU}i_rA43SnsB47f+#AX&{< zOvjiHY-rebYDXZvY&a``aM`8CM13;U^=gtTs>ix#%5`wjT2^ktbu$xy?>8p5>&;+U zbY+MSE-#~jLNTeWO^&$oMyq9)&jhVRBZ6!#T}Hck=-9Y58YEWp+m0NOugc(}SoPoQHC{0RIs@f=h)KMUVCn6aeg2O`F|$2WH4)j(!Q@5tMLxjb$b;M$ zBZ9-#sk56OvNO_gWs3}9&mDN=k=YlQN-y!rlV~e3>Kwp~Mio9g>TQt!Nv}E>ebif0 zbZ9WHGn&~7wH4X&`<1R(-$yH1S0-6kfduq)-s`RyMCDCZAz7ASi#E@;H)TJ1cR#on?hb_( zQn(ac-tL}=={qss*Kyv; z#nfcw`md7K8U)J2p5A>CYD!HAGJ4#R0h@=(nOwWu6ZpG!9_Hg7(v4(PDoc0yh2`Y=?R0#k!!Ig`<|W4C#>#_fSLwaX7}rvFA@__{_MU0i^!l(+iy{G4mwJ(9IKq*l zBbe@?Cx#8d6&`Fjn)n@4W#}-Jq&2ocpyqiQdA+CIzKZ|wP(WWVaHppXgoZvBi_)pC z`%>G&$tc!IMkI_0HaP+;8)5Ap19xoHYISnlmqB#nQ?`_It~Tl{LBh{2#6v*Fok|Ia z6VaWz8`6!S#$4EN_Xxn?{B-O>Nkh-NuGTevlLvi{XL+d@Dm9b6HmOD(F^8A4dk^bM zpTZ_>Tt+Sz?w zK>lkim59trJ zO~TX9Aa_`40emy}-Q3bg78=DNDa=nGL={IHhW$!g=yM|c*2!hbO;0*H#|cCOR^y^| z*(%JnGMf(9D@T~A{q&)^K(>+eu5*zmcD;*WGxDF;7 z(Yj$)mpA#QxBTs;QnuV7#kf~{j6+LTSQE$&=E~v{L-@Zq==bv4*}7^Bn5qtNEd-*| z7JvWDf|s1$T=5%W$C22yuij1r_4C))@+Rfza{bH4R5YvEMA0W7vGTlc^}2ht)W0ex$IB;Gi)KgdG~#ow-2yBXvw8^LfZ=wb1gD`S1ES zg2-_?QU+3_sGV=81}tJOLjD4U&_um|Z;^~{hdFusfKP-ne$N8$j=i8zJ!auY&Ph~1 zLzQX0QHRWU^khecW54B5X0s?J|K^pt9xC)<%QZN=8`~B3UZf_xiA6IIuEkVhl6tNf znKk>=ko~jXHsQAXa0InO{{0>eRFAb&UksD3X4p?tT(O1Z4Ag&k^@Wm*xr|2W)r^=3ic`;T4n(Gb=I>91pD^#A{*0FM8X0yHmN z(bUmD^|LIp-LZ6NrND_sV6Ao5{*;vvmzHcSl%=X6`|VJsdz@KtT{^% zhDFU6*mjx1-&)!zsM{+#IB2B}N69Io45e!h)PCuF!R`u-={S^d;t>T!`$+`%NNo64 zz^gSN0$9umT$}DMg5)9RR>n+8`&C3m>v1-0944k;evTuvaQS7)b#(8}5m3PeZ12fd zczu305#2EwocH#gEF8;>5`nb}m2uvMgKKj}OJBBjqH_|xzGXM5DlI*9U>*~9OOyM? zl=BJblRZy8y+jEbHe$PfU#R3boId!enU`>(kOe!W0F&1aiMWLnWH#w;hkG6GgP(;t zvuod8AvaT9su(h>m8DEualsgBG8hBHY5G}c)8BGw>3t}SA0M#bg<~S!#62n%E%|0^ zJ;U2Qq6;CUrBDQ~R?TZR$SiHhVS;nv7kZP@+dak)($Y(~(foUwAn~ofTeMOs-(?iE z@~_!?q;zwEPXer#wz`=9O!qE%rll0--}yH$z~V%@QSDxQp6Amt?%cyGI9V)WT*CQ^ zIrcgGk9=24!aeWa!mZ5ta-J1h+V9b(A@s!NLK+Nn zf^FU=1rtQ#twBhN1{>ddhZq7o;3e~Dir~GdaXTOlMU9BXqG}wCAXX8!24KLrZZiS8 zkb+}akbT3Nkbs8#eWN#yNLtNqxkI%kvs5*GG&1|152f$RBWy!E2$WHPP57~V4hQTS z&gC*7oeloTjp_w(`B$nMRXZo{WF~G&*0H2)*X%;sA23iWKrV6`;!Io$IeIo%BN4wDiOJvK-w`sr02%fK3KOuiQM)-g{uAo97fANI{+h#PZ@u zfln7xWKr^mCyIb5Q5>j`%W%cDEMi><#o@fVoy=&fx*PeSesv@{RK)8+F49l$gh)|RP65&xD+f>_;MQW(V*5@vQ>GzD7`5? ziVN4prYB%l{p`>^rQi-sXqpg@13>2A$xluVpf6nWQmqn@pJJ=iKXFZv3N6k00a%1U zZj>m=fbbVKA1TbZ)dp__UB;c{W`En$KI%DK8EdOXSsV z0CZmSN3$IF>{&gRrlK!wI)i5eo6+Y4ahI-0V)hLG>9vAW*Eco4cp?Z$|Ei0o`}bY+e`X#0XT2^}|E=-mnr?G}P=A3u=IZG73x=|)} zKbiuZHeJ@ZrtfdlU0W%Y(Y893+S+n(>`WQnx?QPBB+Q0^yyr{|)+efP;0MQxs%+FRhe@O+ZsMOr}D*R_Fadd0*$zrv8LJ*vm69` z1cvBVzEWON4;!i?)+1h2Kbo1Nni&GlSI%^DmiG8C{DBN44@eWGNYSS-np>>6%XtL8O>vlIM zVy-;|)c{xMr`-{tl)yPV9l=}rfe2QOo)pi&;+CO>C57LQ%DXd?0YD(Ygypp>Vdv(J z_NqGMmEoN<>a8b)QyN3)DL(}JG3^=wlUI|m60K|^dJ|{5eD!q<7$X1hlI0$EfjyEj z@P!C5UkPh zE8aVeNWP)78s}ZERd_2Ev;fvZRPiEjt)8;R8;X4ppgF?GP4}y6b={^DkGIO7Xj$Sl zbjMUl4y6s|8U;G1vUqS)O?b*=zM=ARa6rQ)%x59u5=?~KF7Qz3?3@2P$n`!FA4C}; z?ig1m>^^@McYjb!j^V*9A<$}%JIf0(aZU7e!Zj>VSkwh84zwAp+Y0p=6N_ga+<=%h z{TT-#l+TKAOPoD+OsMDmf@;UHK=P+5T0cu2<6>Y=AWSTA6g%V%rXu6KZVpwtb2yvN zi26O)P7T&7wsx#*ZgD@_3H_iql?c;(cmtpW0D=%Yup4%xid&@2q_P~gb0VYfsP24K zB)+G4D&zy81yWw$5HR8HD%x^D5?$I~>7R7o3{ZBW9juiNNJ-mDDLY~RE{j+>)+IDs z8l7dogczz*8F>S6(q5a9z6jvrwIv54`#{-Ce*{L1-gx|h*sx4(24Q+tC9zxN*Au`FA2ZiYHSeI*Ve@5C-Vyn{ccd=eo{jWcVM7a!r&jI-&G(OxRQY`Mu< zvGD2#)LShFE9KTj-vq6k*Ek{(p#RK_Z{|DYryfA;;+=Iih1!m&%&rHyss@e7ENJvCk5*MSky9r1%f#*Y(hdIaXOI5_6Zd~<1`_7RZtgDT{|7fo z2JDNQ)Yxij>)%g=CoHDVjfYXFf=)z?4neoQi?itCPMJu~@T^@2juj9@L{VnyUK+_k z^5py#A+hsgwfzL^+ol#hNyOPVwl9Pp>|4#6I)uvw9zyVYVqY4lDTl_No?M9qJ>?WH zv!*gr8CD1mVs=6&}0=_eom*G)_+Z303Jj`;y)c z&zjU)X!MIM6&z}(x9n+Sv)sb9hq~)0-L~^D1G3BB#Cvj^CoRy(VOu2v9FuW#(wP>| zZhg+bBE=&G1#}t?KG)4{!FU;!I-iDOMp^BA!%X zO`s+KR%3G9RLQ8lUl^k8d8qrD+I{sTCL_w5biil=A;`z_Vt732S#r#Vs z!1|Y{r2m0X@PAyfvT*;`xig-62pP$cB*W=lp60oODjg|h=~>JgJdh9(J?=Zp$R z7qk6s=9yHpep%Dq485_jVpH2jTRT^^Bq^>`=?F?<^IKNe)^@j*N!Px*w$<_Nr^Z<) zTlU!3MiIS<&`aO+R_9aBXO8a`&q z`*#^2oI)6R4|OqQe_|tQf9fr&0j5a+6?FhpGlN0m4HQg0s#+j>)z}584rw73^dAp~ z1C}@~?r|bC&=Z?Y4#Nd_Nxy9OW&pD^{MbVQ3KGRe?1PUO*MnP^1;eOYbisvG)m$*BJ;+&FwbdemHgF4 zym|KA(rv8DiQTR)?S^X9fkou?%-PhJyJQRo$@gxwIW@s*USZdQjWFJ0h5c8|K2DvO zJYbnMHu-j4t210lZR{NwZ9{Z_dk&LKTq_G8!@RdP2sFoZ zD=r_4d_Caw2d>s+>qvb?I|fmW%#Jg%Z5885t6Iqih*+m%B8Y3LkXneL@vk4R^OJ$~ zwFwxHwifUVsFPuq^OJA!e}#2Q@DGfloTq8!!aIh8qSX?8Y*T_p{>)J|NywA3%I#u` zqvNQ2;1`;c;?6TwUUEss;V}+x&8%C3-CJz!z`^uEb5ZPNh*KF(BWMjPn6O3hOsi35=dstUyWE!dkKCMo#lbv`&s+aSPVrr5k|vr zsi9E7n;o`Z5_xPf%|$UYch2p$xi%M`tXWbH$ZZV1N0x2hs!9|NklS|QxWJp-)zpYf zm9bMUOre*JO`M@>0x^I1-3aa=v%5kc<@+buYGn6w^Ic?aU>!9@B7O)owLgVCpRlS?=_WVi5-MCu+Y^J)^ec#+KDktiHh|5Pe@?i6K<>kxB4oJit%1XpkI2Zk7i2E=3(jBF{bQ{ePs8*{~iExrtlJ-1lekQ(Oh=d{Mf^vmTI)%A7=f0`~1 z*H7#oz>ZVSuq*O3d-&oeLJ`8puJ3I5AP~6btYkViJ6M=(q{~xS6UY%Nj9{17vHuBP zL!&BZWSB3yZb*NUb2e)ejK?cz->PfoL#fP(;QfKF);c4f?D)F8l%tTWi#eFfJ+*|MG~vlg(3^ z4t%4064H1e?ywJayf#BUa8CT`FLhY?VzZizk)W3#FM(D5PTv~6!n+1s@OL= zT?)!)HlGzLl(HO9(rUs*@SB5QHy$3cXRWR6`N}T)+6=vqU@ z5QB2XIgrpi!+A~mBA#P1$6lGm-b~-HXMi>+R^rvhB!-QZO*h?iVvqQr&LeD)N}kl> z^U$u?vSCsCS=o?GMQKIwej712KhS~PdxErU+4)%NMv-6P3$iG4yD@~@ z0RvJx{62CF-@U8)Mf6R*lK@Id={OCspkeYie^5~s>?#Pl=8Pfpl)fKwJXB`Ow`>M% z(3Gip$^aGd#-IV;Mu-L-5p?a^TJBIDFO ze9)T9WYpZ?omeu)OiQ8E-bPAZJjtS+sAwtGN`-oH)?1j-YHP%y(Q;!v&q1Y;01sWY z{eV12n(wQ#fuN-`a6T-B;Y8-k;(s&7O{S`2w4IEJC{bRW@FU8GexDAR0WEK%t<;h8 z22yM$7#{Y$<~=m|GKZhpDq6xc!~v;$UODv^wwbWbv{_> z?HJW3hqP3ub2yg1bi?XS9pZ+e_w^uQ^Q}^E=f$^IaF6OfqM5!L!(Z{J<5-IE-m*>Z zlzrV}7}oHVW}9%2T--X`T$=uiuK$Ontk}`tuEg`YBP> z`v>|lNmdbl0a{Avk@_oj0e%@%sRQsRN$h=A+ z`W^7OrzVCrKsM+@J?`~NB5^KKr(0JcALQ^@4lhK=*-$Y{BZz}oQdKJ2L?gLyP%X!} zt}r1)FNStG@^#&qGaI|Hm&-*~{a}J=-ALB1Fw;lSwxn#v;qWa@IfJwp;gz9aB$hV` zDVjJYlQ{ca!D&=Gc|q2S3GrB)sZZ*J4OB)87|yFP?(a;-Eirriz;hW?#?%{Um~`pq zu&}Ax6N~|rcs+`Xj4(x+=aeuy3O$IPa0b-6HVKd3cnHZghfd<%?}OPHI>W!YxP`yv zk6Nlo7X>qr9CWLN=@P9V{~`iz6sC~JC?8X#P%|M-L6(ND7oe~1=_sx1jP?qKcT$I+ zRb*|%Y!t$?@%L70Ksv8+n>Ve^t8B?;=*04tv?Jpk)%@_*5xZ%ptKN7)s3QT{q&G=Z2 z)gQYSa*6hX>9&TLoKOU@3Bxm#w!Tw0IH}*4=6?|SXR2vo$MACc!o{PL{i`AMf50FU zw=*|&`{MC@Md$w4k})~Ue~vXH8uqGan&<%z(Dc%nkPW|HSY+9eWbf}rVPk4rVzmyv(Wcz(HffVrj^AzdSZ6mLnTxOCLL$HN;OWy28U!x{!U0l#T-Lt(^<8zgU>QuSz55) zg-UOek&t|jfB=UpgX_RLeCEtd8yZHofU@x^vtpmKD3egO|*oO6^eduW^6`CSm zl>8|qGK_`+uo|p{1r#>5jHpyMl5BDG8Kazdt+RBh@7Jllak5n*vz}6HVmb^SZBPE(GbH5+O32P9Jq~!DiNMXIU|V)Lc>%j< zS;2UmCdr}Z0;?9};+hafE&;Fx>!osJSKF|?|M*}6ayQuJfnE5GS zR#?>noNxjV=Xt5G1ZHx5tjRw62fr|A^}GzL=yxiuGp8TA%$4YsLNRUDJb5j)F~E90 zb%Yq+w1%2PatXJbfrfbH8mniuF@~CRts#2^41$a2SlZe{*RAqEs zF2}H+0iWUj{t?%a=t|)`BUP`R?WJ(uMN&%at{|`j@cr?<#*BkMtNn>5^+NuVRnXcW z8aWWIXJYR1j?omoc)vvmhJlf2rqas(-SFJeXU6x`5#7|yC%OWZ6vUD`*&j4*LO_`O z4qYH23S-c=C3A4Bo<32B@k{Aq^66HCkAk4w+k0o^RC&V3!XcOPyf)M8t&@hZ1 zNlr5E#nDc>e21w7(~uHYF{C1{7bsNRrp{fIGfBqrrS&6@$w4!|N-UaE+Dfp@OGHRl zkROFNDd!*pKM|=nIJv^l_TE5dA-3*1g1DlJd{Ec6^AEviPhIe8VFHe`mS z&N!@X7kI6LUBgvs3Y`0^_at&)UPnt-Kh!MiBHQcZ{VO88uG(_Nm%`y5p z4P4Z1-yUT*(I|uQU1Hdi0=o{bALA?TPT~~!M*5);0_MIC_IT@yB9u~~B6OD+NhHgx zfhCA?i-a1x7_KP(UJQQdzR!m8Nj@m1|J)oI_@zteKUYTvCL2{TUZUS#qfY+}pA&zN z0B`NO36K0tF=}JL%F;H%Yt7DDMy zH|k`3Cx#^+Ow1xKpoT`RSqev0hL&!S!Rm?<@q|IwM_!jil0K!8x~#zBOA;?^2e-Y4 zdyN#S1h;iBltX`&L0$|GC~AlRzi=z;r-uJQTnYy!Zu|qB>KvF?#H~74Yj7>Ud z-Nmei{+PBWr;kku`zGbo#&}5wJ4CTo0rwUK{6N(!fFl#z{|3Xj5}sJ(Q~;iSCeleA ziy98ATp@N!s8AszBc7pQ5E#;AP-!D8UZfs_cB{dW7+o=OuKaK-=9;=t6}DQTZkt-x zDx=Pgt87|nmb$Qp8l}G6FlQ5{WZ#qMBy&N=;%=-vWy8@Zr%h1G_V@hIn4(KWS}Y@n zXT3I+Itd!=r3M;p=9OMa$DbNCek?14^yL^wGmjKcr+HFtyx%RFQ6g2#b$LOJ6xFtl zGgrIi6`UidDo-LvAYCHMRHlkS7<()Y3iQ@az1@jDk328wk22l(=u#H6w`0lbLMZD- zDJg@Ey1uT6wD>`z4S@Utq=9}17Y6OXuNkNH)+%LbiP7D(ier$yVxr9|nuoe9FGHMg z97>{MKY(Q<&dC^3r#kAvuk~*bc=HWBRNxDU?$Ttmmz9kk!WGTdeVwX?gIci-N>S}B zxM`55qPYmQ<%b0Z&!I25)F%XU`|B_J>V-Ob?jof{naf2OdFoLAfIY0h+g>56mI`zi5DEwDX2no;95 z=Ed2_8YQ9|*AuA+y-v(;I)@9S>Ef7Ih_Y88{Zem=^BfI-t&^X5cVCTqhnxTQ9v~49 z&DrOvKI#;ms!7^mQ-z8pe$7`=lDMii;l6CgvU6QMr8$f83f@<>3_4Pg@2y2SzYO6| zv{s^z=S2Ud3PuyjBV0@ab<7q#W!m2^mF5}O)~Tz?zk+UEhODJ!1)DBBDNjwlWY)ug zVnMTopWg>#tEJ9sCJHGD#~cBY6<9Igk*jM|l`(i1=-YPM*s7IxYBORU9^QrG<^Exb zB!BFhtIZ9!W|zBtcY?f1sMDgZ-5U)OoKF-s( zmB%XmVPAbB=vWCcE_jNsq{=Ex?_e@;3e3p?TRONGL82q|3xVW%mh1P_r%Rff z;EaczL*FIRcNBB<-)Rs=7(itW-~{Iwkx z>DJcSvRa4Y>qRlQ?Wd2na0~(H?&@VYg195YYuDlIPZ#SOUq`5lnGwT`tAQ3QD*RaA zC4wGbHHF4f8`{W|zmNE{$ZZkbv(Y|;?U1l#3e1)B+fO3}i8}JC!KIj>VH3f<8NTlt zDKa#G+NQ}3<=!fGn>iN+Cxbm6y2ZV<7?ZwU!Kq=B{n_t-c6Sbx$m|eH%vcDfI8H{5 z`tF8~{gq}^og^*aYA@t)iUg9m1WJ`+p-!Zy5XRq{y#@6g>bMf;TmpV-59qOM!^kX6 zZCdO7W|fsOfZ-?8w$qP3II9M&h1m;z_08L9G|}qXeD>zLg}xk-xKsGuu(Bx@3@0wy zx!WBF^;30<@A_&lIG}mCY%ilvBAd~sQ{kbjI=Dfg!`2gtDd)o4p!V*eqb+CA{*qGA zC%JqxWdNhUTkUT{*aoU$J)_b(0AXT1%1hSZF~^tv-14KSP*jd6A&56*f9d&NJZFxEW_Rk4PY2if(gE_m zbRch46h-&eYIiVJ0hVk~ETjgW6>ue*hdA|w5UjT`d4=EUG}UH9(3Jzp?uX&&_o zyGL%;GE~ZIrEBk_NN6eW*twxM+Gwl+;}BbWSAK@<37Xoy2#Xr~@W zn$_*!#9*5zcHVaFNWdI&Pt4=ii~4jc;+hq8=@2I6Aal;SR1Nc>_Oy%NO#p(M_Ag!6 z)?X2!3VS3f(Y8U2tn7R{rEi`^wc!kUk9x8%;_|jWp&-xks8AnGZCWDs@eOf5ENqxi zNbxlU=eCv8R602_U#lbS!U<>5!dcubyy-I+xY$xpMoj1-RFb4QCJbxS*Xf46bPate znC45umP^4=qa;-DB+Njf7?lO*>Z^7_2Pa1R)}6F+BDvbaTeqlgz8B3#oBw>?{uS9g zyl>Xu>HNbTLE#mOfP4+vf2>PCJp#^SxbEjh2Ci0`l8H1$jbl-#S^0XGrv9#p1Ql4gzimA?AD?(+_RoO`gvI*TvaxeJIz7TeNA2RM< z(9rDCD{(|>Rom3C@CZBhQ9)RArY}YfZ%l!l)gel#qY4C{duxIgbN``BW|9A@m)#d0 zORok46$Rwh=GMv>5JW6p`B7c<>Q$qSPB{rAH*SJ&2j)UUbt^e}5K^Ib$OF2KVyN*c z;g*5yp4hX1Nml-Ezppqq9y!zYVb~nZc_2$?^3FGVpKlx{5wmT=n6Ae&ZS-7!0n{6!ZOxs8JOpr+gQ^k#k;+>3&Et7iFftumz*{THQ5 z0OigQHPxB;N}5b>b(tXE5o(GX`^iJIsCd=M93SvTD)*oTqd+|59C*z!;omAYisJPR zNRIS3R`dn7#_dU5vL1c{=w=N0R)G?p*`!3bG{Fr?MJxvgZBxMsIo74=26eqXt`(dNXcda->mWIZW9ig#mi4Kj#h zGT}wHb5_?kgsnQ-eJl91fH=g5)4m6GrH$`7O?(*o3=M>4T4zD9a($`)C{~0Hbt$*m zP`TB498$2WQb$KTd7KC+vjqb?l0e)p7c)sjH(&PE%D2Lw31F_89JzYA%(1rmF8a+s zA0v*vOibKZ@Wn{GL_Ds&biC7;BQuuDLKR{JZ3)=kp{TAkMo?!eRINaUzqTC_szHuR z+1pBo;Q^V2r&zW|Su+1%puymLd0ws_u)_qHhi2PpAx4dBA|k?53-Gc?$^NW1frj$n z-p|GxBOAXhGas#QiWCum$R)|HziaM>NVfrpO0(xn?Z5d^bDqxSHdoUC-O~w}+JOM` zswfG|DM^#!QRJ7Hi615T6<(g1AK#qcs3>~hT(2dGd>{{fj4$TuZF(yp!qr;JA^zLN zsB;J+M>#115z1I0apM~o&m%rK`{V|=CMeM2n^GawJ9ZuEnN1Ry7y*&{@lNg!2CLOQp=RbjaX z;_g4odf0?YKe=p=+JAQH?zhEeEr$)&o$1dLbvcF-TA$JkgaXn~|3WRuQqH)b_wIXi zfDsP|U6JGLGj{M5-?}Vhq|($@*g>6Dj1_3&9-%hayjMVSDfO#GEXH32`=0qWUp)=X zol33#?L#i!Fd2VZoChnZQ}8zfbQy{tbDnM^`bYM%Bba+Uw#!}qg?|jV`4OI*>%C^= zD`x7;KI8#UlGZ@S(KfG_r^ue?|8N0M$TKt)-v+u|8KpdHx>d$f#^$bW>tWyL{43)X zIM|9bco;+ixmLHlj&|cprtv_0sydJ857Tal`-oiAu_nZ%(Ts8fZuiBf3oG|R`I)~5 zSz=r;!^J%*JX3Cua?>(FHfNV@ah~r6kMO~%Xom^m zZL`wRvmjtq;xFU-N`Vj4aK#SS(eC^_)Xf)z61qr`7=i5f(j2!^pjGh)@|UbGh{#f< z2>*iQc2D!3NNv9ah3f8&E3sZF@k9N!lfcw0dim9_DS&G#S%bzX0` zWH{K5Q1uyxy}Sx|H{^YV>^oLYpg6B$$2Th%1O~tI>GJzQeX>>bA+b~uHL+IfzoL09 z9Y((HvE!SR8;q5YqSA4s8I2d5W16UKBWRPK6Rsso3glH#mFz3=J&YhOB`xn$8#9H< zeEp^!z*a8t2WemALn`B+FZc~*>J@x-k)zpgpr}#1b4>6dbt3a zws>u?gjJU2PP-KYC+4e>i;QyAtrm8js0m(7Yoc&7J<@Ws~`Iv{f~j*ghpPT&3Ck&Ita@4O7;xsab0*y)>B?=hj$t;tCsxd)w=3ULR;406q&)7CDIyrDv*+eSHI zsPNPxP~15bSdJjYIj?fd{Ff- zIOSYNwF(YvVPUs1kuzZKo8)b3CZdj&?t5i#iXP%`^$lwr$~FuZ=-`^DO~HHfDAx~= zan~x7{93k#-qbNYg?6yj6MkVH3xby`-u^Z+`0ZD>A6Uk96D(1wGQkX`Q*U zXVZB21kPUrsV}DS{G+Dqqo!<(Sqj{8hXxp%1)U4T>~AM3$;Q3#Km%L^+eg@kjz}!6#kg~k!-#v21Bb-YEqlv`z~9EjA24WH<+?1D-kjm~ z{MjogPNWFZ+49>y+-og6E9JFgXb5-;uq;&w06$jc{E%`ByR4jC!KwidDHL~I+?7qc zb535zSL)3!g~3HH%%hiZoKlJ2Jg(CTR@9b4)%3rDrPF1y*=N^Pyx1G>T^B;!M={Tq9 zXs;L@QK132h52~^w#!pTr}_E;x>nqcSfSYt8mu1CjeWV0H)Y(}Ce3?IM29Ze`m$>_ zQ~viTi6)%-IU&h>uD!S(AD(RJIq9L!HlH)WwXZE(2zP=VGq3Y<5()Qal3kId_5*wV z^Efeo1KinmRZSkHU5Dbn?G&;t6caU1+&}ta{#-jl7i5gY=WvToi8C|X7x)#|Bl*_; z!`oi@zh)V{gs5;CDYs-7oGKY`yNE{O01VGTfJb7%;k%#a;GW*Nbq&7MDC43?5!lOQ zfOqN%-CGvX9f{)f7LWT56agWszjeijf2DS9!{)tykLRr^eCA`Xt8#FG z%Z2BCLj9wJ`?}gcH+>Pqj-&sT!N&3LmGFO1VQP*})~5fB;nS*NtBEI$9RQF`3xiOx zX;ibPLtvM-#e!|!AjVuUX)II^nfG~NmWIq|%A8rx9YzaG%{x3^L;46J3``#L^cbQ* zX5KrS_XBM&w3MLPr(Lb_q5O^xy4JtLfnh%(2U;yKZjMNN($iFHxnDZq z@k0V|m{R9#J1d_uzDPC{GuEe8^J5g1|H7^-=c7xXaw9#4x98))W^7S@JWtNzU=V;f zEx~3pNHE zMW38~f9vUEypPvJ7&UojkBVTYr(!WTg-Bqi*?5Lmlxj;G=77uJ^okCNbLTg8n(b(v zI1v`jPd8LyVBojZdJWWOxi4oc1@9Y3hi5wjDiiq%@YBou-0u^9KYHleY*H#wslWMN z!>P7r2ngT7&gQifuj!Z%Meql^k5`%+|n{81L>LuW#9FqqmB8n`|_tWXLP(*&7 z9d?ti961ar{dRd3`?brb*-h_fUL1zSxif}7bg7-(=8Un5U52PbqrSL_p+K@VGHk5y z(Q=|HA7Kkc2e+%N12MO0ukc%}F(@X77^l!gdUU4Egg2{>H=>pCW%dHG%}Uo99*EOAIZYL!>A&c*&XpE3Rc zlGgix_Zm>BF2oq7^Y>oP_}gL_2bimGR%DAaiX+HAy-2^9YxbxVYtyx3h=t>!%VxGH zT`^n6Ukrbt2-s0&dh{Jc0x{xHdnlA~@`<|3(5>?M(^%{unv|ovEKcZlAINJ`P-}eT zzE9*0gLOto3gEs>napB{Q}ENRi_J}eq@zx_vEu5Th(CCK=QI9ValU&&yu%yK(Mg7F zEvpnrG)NnT|68wQ>|la&mdX9c?2Q_8Z1p(}S1<}`Bd$l37tvzEnY}v#=@a6gGP2%W zD0lQ_sByymt1=?^@5{)45W)U?4)6aS(K_{kf9Fo?-QBOz7+LYb$fY@ALMB zE(oG#7-dKee!F8c)Owowr_T>DnL#^zlxdoda-%$9n%BH*Y(~+*#|+KRD_`JJyEnxQ z@+KNZ%+wrweRhAHg?)L+9V`<*&MOR4o>Q+;`czx#^(Kb0*93v07qHDEE}90G-=E~Y z6P^uQbg&WS|%?i$Cr{GL( zd_h<{$jr8+Bznk%74@yj#?S%BoxDQyaI%J60z=kTa~q|WK<6)T6_>yQ+k%{4bxvac z{D*3S8BvkC!>dbdsLr1R;T0X%Pba^B$Y5+G1z?CkCQpE!Y8*+Q<(tCb8oCSqAr_*u z!AB}dH6G7CEbd;H`8r{Gy$8k@n{cP%A2JvPr2AA8Je8@-YAQp3PvQ4~*+NHc zwcc^K(Y&!cAi9D5c`S2n5fYNx@O<$X8%+6&4R*OV4~wZrf50+yFZ`9MehV%OFPpCK z2?#c{-mfJW$p;X zilZ*3`Xv0^{6-8X9(p99RG_f1OszyEt#pN3$0fyTMnOp;t$^}{1`|F)*C+84y+=#Y zIQYFAi6%eHbsEkE=7`^p`z+n$8RE&jMLB}D*qHy%d%-%kpH=g3(O~~yvZd6l?adwC z-M%uVOwC*0Deao5S>>M6IQ#ag~K`pu6Nv_AfObZawPuf zz@LN;Ej29@KcvDAl+dKidIkwdxoyM6B4>o>w7xpaWINgF%za8o=lX`HC1(l^fwyQ) z&TMMBGKxQRllDiwW5_5~;{tx7$w3BSr~dM%WYu0u6%8RF!%w{%SPfTPbnVEB)22S4 zR8v{E)O#~+r3o3#iLnpZ*kUn5^f%0Eq6+z*bkk5J9}{D{-$v1onywkrotG4V?KFQ$ zn@=RUWdJ_K(*Gysj*{aFmqx^fbhX}ijftQZ5nmi9t=jMe&&-VB=JZ%WN-@y}Vyuwbm3zx=V6Cxgb3r z9)M1wkg81Z#aZx;PS4f)UgDm>zCWG*jSM>mp$YqQr$@dFQ~d-ZDyGy@E5RQUsZp3@ z)-3=Y|AKv{-E_Ddgybke!Qu`?0>Roo^bF$OZo`-2L<=5 z*Zcad@2U6Gb2iWKvF{C}W|R%3X5ixG@c-fLt%KrV{ z0BPI_?(XjH?(XjH66|r#y|?aH@2h*xd$0fRUAubCy?X62$NUYX7YD%~tC@zB>w}k6 z;1o=j)zVGL)})E`Zelx)ORm=b>&}fR|730_6X~0VBM>AwpH-M)xa6z z1+y5IQ0JwH(0bP;DKv3^8X__9vC!|SQM+H?`vvC*LClqdkgsT$fVXNF?;~cyUl4eL zMk{RM+DWM30}$79=>ZL6pE$ER0*bg?s1M#0k#VbGq^Y{j< zoGoFBObaV`mz?1O*2cq1O<#tJaU2!_f->U3j)7atW6DyTi^MVSvLq$lK0b2;tL6NT zh^<7Zx*i#vghs`TBo;kSn;M%Qn>y!-9T;IiTIJ(c4Y`IE;}!3P+Ljb91$D_W>9pkQ zU+Dzp93~f{FS?B8$U*H9f}-WhBwbgbX4;x#lPd& zlrWO49i6$HCgM+eRWX7qsGYx0z!nZw#_k5$-Qy_^V<$Jr&|FNN1xQeP$aJSMttt-& zUiWgld9;@dypl2jiQ|KL;0^$PDg{lc8l^4(S*nWypYuS^V5^gOY(uPGONW?S*?F)su>7)CA3V6!-q%_#sxRa5JLCI%SiKX4VY2 z+&hSn^^(6$TFtxN6ymgd*YjE~>fboURgcLuIT+{Ajt@=z8F^|_hv8au7`dV$ja|9t zfdgaEwfn(nv_gf`X#(p)us`M*ptW+c;ZRrw7=U9YYShrmtn&svH@CLr8BT%&ta!7E}<6-QA=v+4w&^57lkfx#bz8$BH1_VVT zJ?}_T)r^lXqOYaxfctLpAtisiW_v2KoQ9;eE z^3W;b-dc;onHNfs+_8RP>L`@vu}kIqic2}LR~U%rYj@*Ov{%>6wlR$O&YSYc5W_{$ zO9lHIigD1piO@n$*oQ;9k&cf{qJb~ov{&LSU5{Uv|2T9LjQzD_T+Q=U93wj*hQ?e# z_7Oko&P96f6`;&{(l;4Kwo zw>MTN&1se0LPhV|+Q@hai@u+%Uatz5(`5J{GkG3U8O33XFbL%aT;}Y;c@a~EQ`#od| zHZK5AsgI)=!AW9qWPp0tGtz|ZHS>loJFddAcu=)igKAu%GA4ctf2mn!FSEn_M$$lIdhGLe zj))L#4)T6`iHPtmk|dq=RF0bB%gmcle%o4};_h2r_6N{#5rJ5V`sJN_DnYB+-0@#e zxJY@j=!k>UoICsi5#rY|E!fH{A(TDRoc$%AL3xv2d*TPHNc`q{djrB>N`eFC9#x{6 zr9;FWWV?S1)s3MwAz(E$uiNoIy4-fGst=5kmczl>ac?P?s?v=?W<=dVlZ~0SLuk@2 zI*+jVv!GL0*<+3;SWy?bc&15N7-dfsGzAfM!Jc0Ddmf!$<|MsUh*~2-60;XnnNco7 za)-;MK6hN%-cqC#D404+T53_buaQmZ9gnu6yNxyiR^Ki0{wat{nHkIv!#-R z(A!g9acu(het(NWLA%txN$oGmjMbKPK-Uk7y}}d-fK^y70}K=Etpu+DMd}`C61`Sz zY$xn&JuXf&g~YCp(GCUh=E&x|aj0ae$2zTwTJN9Ad-#&eC_?IPU4e=3T*NQG9mto5 z6g2|Y=)2Kc@xF_C(TLW<*nfxp4`C}Hci4{V!`_*V^RJF#lK=jV^dG{OGSJZ((uxt394!}ALC5~+d2+c{}D4TEl5Q*Q~~bhn(q*$)QjGY;+#boM^9JR z`x7_U%NQw0Z{TeuT`jMv=HjR85Y+t8dq!U^$qoWe;X1qjKI=H+?~D<(sXWJWeW(1X zfj9&+9uY&2kE$EPFzRIJeu8@}<3|c*B*)w6hgLPG1TkC~#B9W2uE84r>>z*p#J*jy zr$Le43z0uRLi~?ow$B>S)#BrrE&MN!*&_dbZU1X@UBT2DXaaNwen7|_U2Oipf+GR{WefdPg>+D_Kk=qiu$^nPbbyV( zsqY5w^BAwW`TpJ66Lcq^8B(tDAZhRrLwY`_LAR+^d9y)iXaoy0rCn%f z{bs(^N_o!%=OWTeXDk+YwaAiJ6cQZEW5wl*Qyu60!i24$%lq<3FJT&r$c8_x@&*vA z!l73!8jo6bO^GuvEGF>4SwuRT6Yn82t36KcE=EuSy@=$$$jzB9zR)j5oF=DR4niJ< z=3h!+-io_Ijud46zF2NZQ+ln@>hfB_eodh7Qymp6?n^nnvj|h;zLak&x&6-cRxfDv zZCi3Tx<{S}WP(HYzGwvoG7d0q)jq21$R>+ZhUW1Bj`#`=J!eF$@QbxY;cllO9k~nd z)!Y;{*d?FfN?ZR1^$KQDT;CGq!jDFe3zTVfe##Q%P}l(ftPGtEESgXYPi$xIKs%m} zBX!&fxRq~y`Pr+_lNruN+JuQGPIiRiFKrUmcvYF={!h*NXSw)Q)W`DI|I6iP{`brO zAItsUD7-SwwSOdByxUYSDNIv-eY614e<_S&PA;zXy(DE6P2s=<(Q%e(asy=m@oS0J ziC6EJeL_#!?VDj~(Q#8#S3@wb2?PU9u8;u~Y=kE!j^|AWt4`+^-fO#&9Y6kJbt2M< zKsm5~61HX4Ho6vyHKn32ZDZU~L-0^AT8?Ylgx7;+W{c&(Iwc^^&%R=6+;x_oYCod@ z_Ty_z-%5>=C~!XunzpI?O6Sk%*EN%WU9JhD9%(^0stooai0@Aq@af^Wum#QIsNp7g6;H5Z(UohEmk*9Uf3(&i0EQK0nbrWCE(! zfX5qm_lggmgZAw65DncT6m(^um5c~(^Us^JAiFsi|NQ7~UI%(RE!?(FUO3=$$P`lXyRmN%yr!yWg&VgFQ#SPg@`SL1VEm z#)*isocb}XWvh9(tDew)xK8^@JzWd3q8yKDEx>cJu?g*GO}1^T_V8muN`tKda1Vdw znDLDHy=uFve!B0FumUons8gMi_hc`~Nwb+>@)+Zb*%>MLA55fkC8GijJ<;kA&hEzPjX$82Vk%tNrwiVi_%q znLkwM9Kr;)v-xauA=a}?;hkM^FQP{M-DH*_GYHT>u&YKjp{e0bJLB%6Kz^6ocR$1R z5j28rJtk(yPl3vg9tDob)U1zs24=HOVz;&2)1Go{<`E+@D0VmHf)FFkrxUPy89Cgm z3txpd7QgZcY+kQ_`O+iC#LOmqdfonIJdnAuRowe~>96Q7O!e5#InZMD!Cn3j1kKW* z&w?lrOjF9=B{%>1SJ*H0%u(?{aT)xV6qo-O><2r`e@af8D<1$WoHth)Hj_jG9fp{B zF_l>glGym=_!uJ)1D0$iV-O%RWhgEzZM2tn^ZIk^C3Nehq*vBLvu0LV`QG*N!lj_z zn-_I12yYgOc~obq;OXJvwcz#Q^*KZM9e$HxlqV(;V=N`Ri6Pkoi&jtNGCrh4OBt<) z6WXpM$k+i^uCY8j$n+1?2)rg{DI4OMz1ONU!~~lUIC@X%33;KXv-&Q^Y9${{tDJoW z)9J)W(ujSeyrJxdkGnYEH({e`#HFVmwr{~B&y4qPD`BF64AUCo+Rx{b@UmxVw{DVK zC}44T<><++AV8h*M{B43-wf&U&^ixRYnI?KiIFNlUTALITC4`6^~+Vl5+hFzeP@C! zj0Yc)7pZ#lM{qHhTm2p9bwZ6`%Pf7rdy8VtTH0EJ9sdWO$}lJ{NXdQ4ar94Ry{YGk z_elO96_tua8Y!D5(KoyAGE zIMNsZ+!&2>b?fZg6U@)mFM18N$Gc0{kdgRZZ%nvF92Z)qiRX|Z-J5lvLVT81MP)g{ zbT{J_0{;LxRsi#N#RtAj(~_3NDE9@311++&TE>mHAMi-F;+fauWPDF>lc7xdxOXCY zYuxEK!X8&2+2(3o^|cT`7o-bAu^!m;xu|{>qyd)FEnI>HmJm0r)&Z6uhquc1x;<3u z*onj}dZ!x?ctX8W@Iv#KaE)L_9K7m5_SBdGgrgmy3m8&z-3LUU)bUp~#MLB|MUkuIs(kOkAcN?j4)q!&ahT{Q6A89xQ< zS9(*`hmt>qRfqoaHnYc$e(BxSqWb%3Dnt4Z)*zEhQaAc99`i7D_D_8BzpP&)px|P2 z5-!=!P;(qw{XX-0VpR+gs#_+*>xqfWBE9=9p1t@ObwvIWq(NbMG=|yZj&aN-UC$=y zhoYj~J4v+kD~}B$kym^HyL-ftkb5Z;r$l{7NE>9yf02V{1%thct8#v)1Vlh=Nel@W zI7n72#&#irp_4=ZL}Nx3?}NO+ zXI6%S!c>O8NLf4mv&OM9d}02hW8AIn#B1SUeZMOw@Zxi2z<5!=qaL}?Ldb+}??D;c z@)Z}{MbuV5KV_>N80I40fv~)y%gbI2X+88Icp@BqojC_U9CaxI#~pkWXySea#GSc} z##;@GlzmJLdu{CVkCb~1KqR*Pb0ymN|>qWa&eHNqKhb?qb^+Jj7xLPJvu#w<5@v zS;NJ!K6!GS8FV-oWrXsG<>WevP^r7hWgF!3sj^!~b{3lCnEd+b2e8-N}o^x8&7Hq(ChnjQKeSB?4=)+VD zw9iB~a#|}yR5)iU#>jUL!=!^~3gP0~QQ@Qh^EF6e0LJ-GN+>ziL-rj{_ZrKk=CTw?9mTD^qDxW+rr=_HZ+5Y8Dpfwc6OsUyQ#$chgLL3qppJBbd_qaMnxIe%|X`T@EU<; z3(faLb%H<`gcuDUP*+UkB5<|)6*;Y)bYzvBg;1%Yejq*oS0anzCC+|)my9cCshg!N zvbgFkXgQ8rYlaL?m|Wcjx4tfN69F@Kl1Ofx^S}PnkzbL#C zj2nkNHr9u34)^7SX1Hy?5^H|`ID!k|W+%xH0OOv37Lg2>U#C(NI2sg?LH`KtTV%*N zt~U7#3x2#y7W%;GkDuZPDysr6?cLv*w(u2Pxh+nh*JXFb57+VS5=MY-D-!-KK)42y z?h)awc#~B?aq+6Szs;{>OU3VRF||OqUv;ZQ*Tz+V-;Yh1tiu8dfwIjEcd%7n^^QST zje7*UJj9eC-BRxg5RF-87RxznWHZAU!wdYV@4+rxctuwkpf(2OgZg#Vez162W!5e-oR~tS}w8mp+wrGxHK+d;n zsc;hH+$^f#4E8h7%be5`DBpAx7@E?;$zt>u*C5$o?=}1xH5%3_4g$cdVZ?B6d`eGfE6S(PMinwWPm3#Bau<R*$0^HOV{EvgDr=d>+RnSeAnJHzZ`DFvWi%{O9eJ(%UOs~2-(s;-X=#tz<8JF zpDN9K65JArL4$~UI_`z6$}G7x|BU@T$&AZC^^S-Y?#* zqp5zU4JT*7P~zXGcyGxcj~v3$XgeN{U+bd?fhsrOVP=otlqqe1Ygc6r<0b2ROebJq zALgw0K{^|o1pt9fcM0Nhn0%q}w2gSrn0mn_n5X-=jM!@nAnp9-sua03!-km(N6KL}EJa%JEBwJL!h9{ouoZzf z^|+C?=2%<->$kG)r)Uf4tuPt=aQow4`%7cq<&hrr5;zf`$PZ2PAroWjFXf8iC3#)Q}n^z2CWWL=D34 zwwcKa(FYfQ+IA+vQSFX$We2kMT4QkKOedv9GKPs{o5~_ohA2VBIYOPEF}me!qvrC% zySwnV9;?~o8o<|ILpQQ<~v0ClJVu|ZaSG{|&lB_v?UB@ee zLKClv6Db^i;O5xK&IEsFSa#@jShMhLOl)Ms_QiA`Y()j5amK{$8)fu28yJ?g0|!OP z$;4ieOltdC=g1T!b0AcW3J02`!xxcBzObgvxz>h1V84)Q3(Q#wfP^25y|@L$8m~2(@v`N7j#*lmi!f zhTpqHC>#cp2)h!l{@kv&CAEEogI9bQNnl{7dsJo~K3?$=i2hYKga6-4p8utI{|BP_ ze`{gH+9=I_MICq_5sWLLCfS6{h7EDQMYjy=r-5qv1eQ}&5a>ZzKl`(%1!~Aeq41{u zZb+8=*p0Fo$TrS&CpsQ8m_)_CHZ*Q$_BQkOa`y`Jv!HOLlI5ES?n9kN=2)x3e%5bj zgh(98yz3X|Z?%ycg%SRVzs^|X&8EU9!G+olj^7j zH-IM5reM~uXxY}`1<&nnq>r5d3{=lCmlL|cS(hi$hx^}Noe#*3Cr>e!y-XWOxsKf8 zrxMlV^I~<>EmtjK`uqlFg%oV4z~oj^*^>FcgOQCVPIE3PbZGi$jLgVk>4RBGv@)Ry zb!lB)DUf$dhrKerZM&d;!jM{^b%ySQMeiuT#X3#JpSHu<0Vtct2J> z@`>7F-19%Q(h{kEX+y?kP>fS5{n3xVIP9G2fG6#0iTx(If1Tita++uEdUs705EWbd zDUG|R9=jMFP+|X#{k}_uqW108Sl&wF?|@cLZa=iKMOD%f1-9lRLcK)gJ~T@kE7v@U zjjdVb0B-5&Y)7{9H21=qlhYq|MYM*|GTK!xUp%+!=bGJ%Bq1Erd6pXGr+@NSOiLy4 z%|2{#lwbZ;Im`e1a{mAMq(17}$r)(ttY~LqDr55Dj&lWlAfNuz6{l{agdu|J>x$5( zibA7tiBu&$ry2m+g+rcffng*jLOu-BVRNC$(|A7D;vdi}yxq~+3)oq~4kvz5>0ioY zHI$amA+~ihbKOreH#a{Ym_YgdiNP=n1y^r48^u_sIaT8Gj<#M`fI*07ljT-Y7~33o-x6566_jt!o%ex)wM7^}@-B*5L^J65HeOvXIBC?kc%gck zUGcIj)KjLqFf}*i0#1il0pgTC$(EmU9J6^+9e>uouA9W_Y7X))a|;tprtguaRCgd# zueLnDqJVevQIbS-)u6@IfIu6Fc_DHcDRO6H(Vw*>8b`}nKp_K~MZMK}uJ;jWfbS z2j-U5E-SKuwG+iY*_xa%ik$}mN2XvC$^-d;zq2A7d6l*U(kn8Z%X7mpJ7+T9lKhqM zX$SneF%DQM*o@0!@iWN2L=$_#=zlbqzo}>(>%gVE2gV@(L7)OFsGW!If62i_gxFG# zf&haSel!m`-(&w{Yi2JlOIH1;W%!TefdAR^NBi$<8D#5h>SznJc4CJ7=br!ZjZYuf z{paU@zVQEncl5t6{7+nwh&@OeXlr6^>PVq#>fmDPQ*od z_f#-1VExVmCnO43fOVMO6Syjfu9!i5-?a0^UnDd2>h9x(sYlw0+cV))o-8RIIx z^qw>pTv?;iviv&EFt?sZ`()mcCdbiVj;o=|Fz@$P>2ZNG2HQN3UJn#g2F8VC{-LA^ zjR}tx!H-)jdq-m3T^1?TzmiRU3SlqKNJQY$yz1;{bL3(I_H~Pa7Y=qIdyY$~5KO@b zq0QY($ns0AYeEc_e zI9+|Oh%Va2|2XE5$~OFdrPpjxtx~!Bci7W@ePzVyKbs1gj-I^l9}QNhe_7I^AC+n6 zXwD3@2O3+LGFt)7tbokM{|t_EVg~*LjK%!ll_zFr=V$`51%7yx)tnuH&Zg%7X;tpi zf%~d{koNux+(hb8`&9_XOD#)=NU|Pmq}+)B&G|EbUzvCmQWBgrL;&BPE0erPUo|$z z1xj&tvPcH zu*HATc8Bzdeis+zey0@1ZYLpBIq17ePet)o3ZCznzunf#@!rDRB|hHzRj2<2W)9}T zFzj2KkvDP2N!P{J!`vwf#|sb_YU9TK0fi&=!LYpB=hKf;vmdHpftTOQj|uR*fp~AS zK5te?KTf(_9;5yKwvefBU(6l+P-bVliX>v_)t0y(=zFAoslj`b=;^S0>DV+vS9VoZ2khO{&FHkoRspNe_8r(f zP5w=$Nw=IS-fCAzq1c^(h>ftu`WzYUHZaB+w%CEtam5S})sdtYbQ>a)-v zG44Y+#_wv2Sqegu@;V6%np!iTzrz=NmDG1*F$8Z{@%0F!!p=d9I{0naV$$0)HBQ&RMq4YtBIE|%bwpkbhzP^Z43a>cyC`izdfa4hb>T6|rPngqp z6{*Yw`(TU&xpa*|yhwAez*a8@W*7d-0)Q=$TW3FvwI-2jaR@ zdUowt48GT;SlS^!D^PyihOH8!bJCPz9@dETnxuUL8d9O#K@R;oc4j?Ze%{Xr_t~J7 zHnG`X)QQ`on<;z)e%qOQMG>J?jzu<>`Gv{R#1AQAeseQaOo?-7+|AD`VL>_CZS-ic ze+k(j%4FJ-RYbh@a27`U9%lvmx{Cb9?0S(zn561ekP@pBr>qozf*`Z7;(h5|Wu1Cw zUaT*&zUw%${(OAh^R#m#fJEw*GhX^jeDo?=qp-irYM*$jCzamQTF4gK#dfT3XA!6 z28qkRKRS=#D31tAk|gT2Q+s**MK;=j!^>K42Ar$>k<8olA^!9>-fr<2b?u-!X;MYy za*DdB9n{F2)A8QXvOa2=agNd(7m<95p7^~;7F8;~oBj{fufioX*t;)d?mV+N*DG^B zPSn{p)o;#oi0!YF=!k2^l*8I20$B~0RpY~BV~Rm7sjKMUwMpiMsI(FGHOv}W!xbTC z=|e5rrtHb4x4*S@HX@Dkx-PHcgcqmY4E7?)Q{Y7ew)AxISy?e8peQMT<5{(hM@!Hv zJ8PGc8kxfOzzSMHj8W)nI^uwrjS+{WnH8ASm10+`YV}GRJR2E4&Tz)A6?T1lsfEuq z&oSBF-u|wplQ@Uh_*hFSnpLTS6NoyJUw+@R8xrg$G3xfQ(d!g!gzpDcraH$fUit)g zw#Cn$-t<;o{Y?eoCTj0LI0s-%**d9x_28s-QpF zm^GU)s3T-c-$kpBXOc#B;sT1JQb=}LBEffAqDb-J8Vq58u%7xzBG_N@`g_(qzFV)6 zU^A^lW+UFz236p)M9S~dq`&NPgqnV4UI5qd#mGUQ&oqHbzU0Jg(UiV#HET!ikyl?R zpyIGvD$Q4JX15-vO2~{}|2(E;iSNh}#bDC3;uK?*O`!p!G&#tsM7lST9R;uJ=Z_lw zeJ*6zlxTMn0;78z{IH^##no}4nH78<3vjEZ%k7t!b&2Lv?DTwFo!v7o(JcGb6;n?& zbF!HWq<~iN!qlwM2g*nHsAqyn1zYVfu)(0&^K4%+!Qg0yf@IM%q1%*{G7Jn&)MUZ(=qy_ zPAuKCl2`)}feLnw10xtk+-Cg??rQXMR;~KMjSUHADz1EqNCo#Lp#_MaPSmuPq8?|H zq1}RL8N!1DGilN68X05X2o%0(tfH9uN5ZiCbrD!kGTZ1?UH$}>5wqpwCm-_vnLfhP+24Nn= zlLUxo_eee5V=#An9b{{X8}sCI^qxZ0kZ>^c^NkUd}F)IeQ>;ud99 z#q@zsL54jNJjY>pSvW1oqIg|^ck$La#eQ7@{J`z2{?MZYFF-^r`L04Pk{xT|2>Eqk zMBpVFp_F|`#10RsMWTwSQKT|k{o8^3b^>M@`<~?zh4wKzGjEM0#mSdQnxh8*TNan4 zqcdHRi(h%1jV7L{Q=;}Dn{aIG3PDhBpjMK07hOreKEXG|JFZyj$V``Kg}{l^A7#28 z1+RooGQK8%3HQUwt?A=+3Q9yRhdI7LEtm}1{LsjYiS&&0Ru|&hS5LA&x=`b_*8&VZWM@%~Uu#Cuhl+aU4v9Xq5nykhcTbd!KQ|$mp zMi&myx$B}WYHgo?_vJZOr)liCWOH1@i5PU+tp#vYjaTAK8r5f1lvpP}nsDanE~hx9 zmpNWv$%I&olZk-;A~h-03?&uvUw+1NYuH!!wOlc2W)2I~NElko>s(sLlOu*xTRWtn z9;H1Zl_KWNTg|a%!5F5qul@O>0Zl%UE`VVN-gUp(B`GQ3{AcVF)J@H3!f4R2+H=^V zEB#ZW=)AG5DY7|9#&JEDct+{i&;b-uwUHmIu@7D-pHJ!7ZJUJu@RE(tNkJG07KD+~D%QBTbh!}sC{ znQXC2i;xEOT6ZP%>ip`R4?ebZ;cp*BGXh2XlYLdf%FX5B_#uIu`;V5kSI4kaB;37X z#deOI#8{+l15{(xk&mrpR8!6wWSbuEFU0GWWs*2)##}V z{SrZh6{>A1vp!oTg|EAHWawK%Kb2ArN>b#^Ys};XC?KbxIY^i_zuUCtdhg!OpQ5QT zazN`i7LCPIMV>gyr%zr16pwgvz-X!SS5%6oX%LWE{#(8^<#WxCmh3x{ky-F`Hx^f4 z|0={5BsQIvYuGcXk-_}(!LI3RZi?U?m>?KVf}MPWes%`f#KiV!hJUx&SE=*|wHd?~ zEKw=S5Z%+qUi5_1^!magVs2WxV13DyUklZq_~hrkU$nw~4yStqJK%-3r!{QH+RIDz z2#^qZhcMWH?RCTRD2TdnO7k1}<^vDio?P7xv?$p0UF&v?+L_BmD*cI2M_ zNV-ABw<4;8f@CG*+$Lesj+98ofr7HxBmSHTP1%=vt=zAWOMaHSv)%3R{SNm~)GZCV z`Q%g}wLg`eW~gU{Chv4;uKKFPhAT9@JsC}pHKfT)lA#;{%=#md+6(5A4qB`HQ-$lN z3f%s>6)A_c^kp=?AF3i7hHZQ_mKym64k;LVVyQwNYKlXz4pnn!B-3B&2VdR3}qKR|uem~%ip#lQOE>x+p%tKa8((9|!X zv6s=M;KvEQ2W@U&v#DLGRwE%wsZmbL;PwYQB0I$M3N5?2)C{L??{~bbxe!*|ZQc1iwU(8ES{oAEn|Hf3r3 zWz@>2^4}_^ye*seIgUp-Idye)&+)o!sMmjhFp<25^*OehYaNmgUpfUb-I;qVh2vRC z9Hrm>4WMrdsQ?KuU^>}FREQPRH9=c)!(Q#wlK4iB(Bu5dOfzI02@xbWuj|%OLkIj^l9Wf z1=AGXiYh;sSpOWVGc;F6?6ON9qgi-58;p;AtAR0w&iXwZD!yS)* zz%mkuz=%jFb!zS1c?NJSz%^cfm-_?1qLDsskA>16R-t94VjFvqujO(4wj!e)2$x;z zdX7}9iIQV;RRVBxw&Y3wqOLV=^KQMVRJy9+v<9+vi$P1zRb4gZw=AqpW2%0#_YfJQ zu~j-M)8`FW)d?));EQsDN|U)nwt6m~y!RCWE!BIB~gw>Zm#IBVL} z$J&Qexs_()seSG61C7*jc(}}VJpKCJ%pRKP zS)Av5yi_m@co|<|eW1QOWhU@XO0-*kxn(&|M-++nCsDd9LH0{S_M5h(#wN((o04J3e0@#hagCgHsK!ivUo zEu@H}neH$646-AjLU+Qh(w8niL`&kSpcmbLX=9w1uEmR2>E2#zM+0ETvq39X-mYsHNt%vTN7t?s^E(^ z#DA!7&p~||{HUKkA%57s|7Vd*{r^U)P&Ku&b2U{kwfO+5J4rg)+5AIOcCj&alybCl zvHwr$>_4=!Ih~Jj+z;k=$EmGZMoN-kwTwxP%!!h(u!QfonX&9g$ZV#jkP)hTeW_ocwJJYquWo1O7Jjjk{dAW8#P_3d?wym6=K@NFbKGmVUFKa^PVX1 zasQHWwN>*-@cz{LlNtW88hhlaAGW<)_xoO1#nt?R#|gfH(TxIe`)@lZwvDSy=#4$& z4X2%Fp^tgS-8AB+E93R2V0_`dCN zb2|z;INmA76Y+{-n~Yg%2{v%HQgv9{!%M_>?%ZX#3Xf8&g z1efIGa?9m6`Qn~QO0kGo9ECjkjoxPk+B_R5I5N*M6Hr*57YMLmjS1Aa}h6W*tZi*4FYG4^XY8?DA)(pZ7o-zgM8zB6W_7USpzhHTS4)-=UfEzEV5 zZSH=)&zw2b7{qXmFCSy#&AJn#OKJ7NDt2Ucis3?S6 z&$uWk#bz}Y^$N*o7@0Vs2X(I#)1elN)vwOmWUztK#U&Nl^>`dj93$AvdZMzQ;Sl-b z8Uphp_!f4<&cm|%x#Yf_MJ|!3YT54RRF6**Su)Q5&=YX6^75?J_Tv&PSLR^;BAl;H z-!s-HPn9>fyPL9Zm4Be`$R{C_g8C5kU5z;hoe3qdpK@JMO4b-ny&xgCh+pA}($Zw< z4@U642m0vH5XuCRjLP1k^aBO+_7@f(?l#?(Sb1q$)x~0$YxosT1>a0lQ3s1NI@sP+ zTTER5GyOV_H*|Yv<>v3IJRNyD(NLfUE~?t&F)xG_)jlIHI#bd~Crf(+mN_=Ktw6~R zLnhV?Vq>ku3dY@%rKazW*%czsE8yn_{A1eB4R+U!fNoPZk#{nQWx40vl4{j78JCp3 zaqckFDs)b|KOQQQcs{MwNAGU5`2v7~>o~xr6u90IdAoH6o7lm&aL^bboB(LbUKe{w5!ae&#!~$ge{$tt4f)jZ%3wgf2u?L=MLqE(y zt&vmcD=nkPjBk#<0+zH-t)m$Y5uhb2ZBt^36%9ji>J=q6Lrw|U*mOtz$oLZ);xFe_ z0qELD2xe8CTR6~CiIK4;C}j>-U`G;O@vzu&+#sZZ{P7NkGH-uki#G{ z8UpM%7%DZ$bjRj{tQq+uw>HJ4T}D)BW2qe595XW`kZ6v+CL?BliOc1c(x#TBfvQda zSu9gar+9-IJ_3<&snKkG_^KD=f@mr80+NzcihdfH55JlCSScq2zs?Btfcn)=^%T?yoVkbxRWz&gKtv)*& z!Bn!=MoMMo`)jtLlIHGl#LK(s=^WZxe~^6rn3;Ngq#lHHX0_Olf0Z~3(<9?$4cx+S zH@nT&EMs;!0lKLo~f}{xtn(I zQF~Y@&S%@USn8rp8A;Reaivk+5Ewx-EZ}PnLDmA0629a+_Hkm65}zursLvV>+EX`c za!pvEv>G3)J63gtIGftFNekPe!`H0qz*KH&D1Sg#rVNY45&q~g{^&daE1>~hYrZNo zc~hmM_%Sy(mVwI6oMxkxn42|KazN2G??r?88X~xxgX$<*)zM8%)$YUg!%G~9Nq(B3 zREvjqqepjS*hkhliP#Az+%cdwGEs4zX%w`KwJ74#?47dXY(5@-0S;XDnv^+{v)E;s za+q%55`YDi6N>gZ@N~NjY#}Z@>q8a_Ad?Cpx-GD}AH!@3B5xSiuKtocawDQUa)UP{Ky@PjW&${m0QHLGdw(X8>+qP}z8+B~kww-ir+qQM` z+xxD2$GPL|HO?Ai&VQh0Rn2;zdY|VLHD<@5*Q8+&R(nK4YZbiW!J)%{|EQojK5>!5 zA-PRuE+xSB;b4DuGPcD2zANvT79npA%aTG(g9w{WLbQ?JRD|GJPW8_2HJHwZYUQ$$ zPV>nCEG1GcZ4@OvfJRynLT?Q*7a?vrNa0IM&cRE$#Fk zdj#(!e}*^n5t>fCJ~%<^8Zy4##TX<#+D}H(z1AXf6tKK;7U5Bi?wBFioUJ&&%pktS zAJHj@^VtIdKTR7Qe?VhtEmRpoa0fl~s|odF&dG5^4$eccLg>>PH?ZkOf+Ta_zR!_v{UxaQomMZ$6bv!4qrHF2>tOx6^^x1*a&W)UdEew$ znBqJo=qj(4bk?m0@E$AhF>Sy;@9A$oRF5#JKK=`!uWXqIH@xbrewv``9#Hk59r8WaQ-o)#&2w8^cE#2U4?^q0d!f;}xi&wd z#&B5FD!?tldgsK;Z4k&{&3wa^`wPuT zep=0fMX@THX$L*OjYus`n%Fx~Od`^!^_yBCGfDUB9Ua+@4&#`IcTl#WXi_+QyM7(z zmXY3uv#n7$fYBUb1zmg18fn^lXej*20@b7ql|H6jxAxfrKp%S&Jo`H2|5mo49!{Q? z`M~9tpgql{{w?(C5w<$VF17{H#aH5XP5KVhHYXVU$-KF{|Mhm2?dGER;0yFmIWqu} z!!7;IJ7XdLcje6gg|qqpyLsievJ!BxwfwGS{(l#*YLIS7!ziDkNu7%xz0r0#Lo^7z z@B|=?z2b^6#6u9ftIGp@=7XwW2+iWQ3*b_3`fR>SD6_(9L$$IrBm`$peuS`y!+j91omDvWv>S1`e0i zk2i&Ka>EVO4CUq@=8%C*upJDnL!1XphiZ?dLzo9gM>9M|dF{|4FyPQphh4pkSA9rT zeS`GY{;t;|Ie>LN1hpQ>2I*Gs=gINa9QK{5J%nd_RB%<&9#<} zXMKI8=QpymfbFl`ijNR4X=r^?S#Ul;_^hiWZPr+{{o|!v6ICqSnz)E_b+xvfXLbpt zHJ1xY*Np`a2 zeJ%4|BUIU8Z}H`a@G3w<1~O!N9EJ4CB4j38dM%88oinx8@n(6|y|pkqv>th^OruZR z0KVx?mZX0gl{&0GG;DYgYuhi2`5kku${J7+QmSA$WcXRe`{Y{G(4jf$(gXQ zd>Wp?E1#e?nO)TYQ#ko17=-~4`H5kAfT26XaYDXo1oiQALo>xLL{3afa^R6Vy!CP^e zhvWa{DMxD*e2W*)lGstn4vZc18WFd^dkTqe)8S?w4C>`%qwaux-sd!jkO9w-Sxbc6 zbvJf1#_W!t^yln$PE9+|FGij*>wTSmox_G_o7II>l zmVXcdDBGaLq{=z5Z1lU~M$zHO-ja8s#(vRRtk3jX9q5PzyYGmYJ79{*3Tq7+oyy*y zoyC&TIX>La26VlxkzhLCLIYo9WmSw6#3{_IJCQ)G3x6l#IWCB9k7~Z-Qf{KfUTPG+ zcKnHJ-aoz>l$uD7k~K9SN80XhwZt=KmrS8YyS^GXR)KhKzeryNbw69#wX}zKIaE=Q z?H*TRp_*>+71VQ9(A6F|un+l;=rcoNY)9H)O%8>o08$ggb9hkpt|{U-Hr)>VU7@F% z_#HEbQHwXXNj_J4RKt-p5eMHrcF&&V0{Px}FI@~!R_s6^w^2zoJm*ve!F2iylEl)H zug~^c^Yb|~XloBni%|bv^j*9so8%qL*Eo!NgdoliBoC2unqtS+O{r&#)(z6li`3l!5FobT4Af`< zF?ru75-d`0TLM!~regH=^rJZgMau}wBpn7ac|~bO3)9J_+bhm7rEM(*mSDEop4JJb z(=mZP9#vazVuWv%Q$Kkd#K{Uu--KM6yw(b^GaIgBj~EdpS-MNV%v73o*QTV+5I!QF z#-flH8K52uj&30yaf5s@?x5ho67B~4Wvs?z-ml6`($~*-IC|0`a;Tj&%$~Yn4bjiF z0c4J)c??_iOepw>f^qaZHzFsgV}aqKyo#5hvSf}%)=Nj0XI{~UoG)36?AkQb3nMdZ zh*&|bq+qPaoVB`{F1RTDB&}$|);;LmwY`;wld!m0TeD+TK-)RN zpj2G%Kq=nT2(BM+@}y6~-2#|BUAWE*X>R|~S$dG)YH5Dn>#R0;#m)S92Myop-GJIF z<8hf+&6+Sxo5RQqidy#M`BVP(M@O;s?%7Fe3hR$_aXzG|=A6W?Bu-*C&e(q3Mng6? zpJJDJW3OMGFSJ(}30Z&bsq)qTDC}u{F zzrqQyg&;iAFmOb<;6X@0oM1mX#Xhn)ZzMP=sx`9gF|8W&Z-^1$Id(Rx)7VuMxf9ns zYzvj2sr7-M#YeS%Tyz7keYSZPeCj`|#^z51?{C>p_&BM)iPjT`e9k&`Y(ZuhO`CqL zL*O0_43)2MbwVEVoXT-Qm&F}Yw2%m`*-fzKXx^2W{S{aMJ&ki$J)M z4ftT@3YX*P0U@6Cm87Gv&36jmfEwlA!n0=0V}H>)=)+VbNExU zp}%1qL3$pCUh7nvwvkRr_7T=#!wJTV79^HTCb@TRgtAM810YAop!PfRmmmaM-AQIo z5h7~cJ?${V`hJ~xQ!kK;18ct-KB}p_CHUS@eTxHfI>h@>J^6uKJ*25G5vsfuEs0PX@x%Y6Va+uclRzXZ z3TGg(&c)IU7d8?XV+?Nc4O;5D7BF4K5Xj9uIY`un33Sb3)ffY_w!&gAZwpv+N97bVqp8lRKk-7HrikiBj(*lhY(t!ia=0JE)R&>TODa6jRBO?$c z%!RVtF|f;P788!LGd)cXWmjZL(=?hXyT^iZk1`936#@VEJzSSq8qyWX!v||Q-KPL^ zVg{5R8{4$P^-2m>VPh40wNwtPF8?cw2xDb!XA!Vw>bL6tkp!PN7_>49QD7d;% zuUeID1!`bT1qj7#rU@x3MoE8%f0+!FmLx>oe9d;?jun}@E7qd38LsEFzR85B=E(Mg z)R!6`KJ2(pmgKpicSA<&=poF-ov`Vsa{tdxGc5qqxOy0V=$H@lTVEmMgB0CSVFPXGHjYiKM^{57G=wg`ydFtw{{e4ud=j) z-sXh>=B*F@@rMK&ma0+#qs3Y%NTN8;Z^LD<#QebBI5o}Hcw^G(jXXVR2c1MP{tROj zhE{=vG6NM}X{5ItbbS(4gw=?*+bQ%fK|J1x9i7pJ2x}XLIG;gpi8_g~!hyA;Z@Y)8F`Aa`};@Q z&)YGr;1$OzStF_iUm;g;Z)ta5oJ(dlwoDy7Cz;09ZI|DoJvXZBGEQ{Li;g7Vxa3_z zF{x$A>o78N+HP#xwfV;fnm^`;%#r(kM47X>?Rhg7Me#e)ZDHYl(epI$blk`fg!6{D zhV#l~WW$R@c7-bb<`c_Q6C_X65oC9E`xQIS=k#l4o@rna-$zzJpZLW42Vv(FzQEHb z`=kNaq(0hYyf~WJjWA4`FQ_~$09ob-tukAd;`;d?N&CQl+Ck}PLTM*}-5FJAMEl%-zMi~}tjRLylaC=i$wM@HKbq(jy#+q*019f!EAc~80tlPtA4+3uK zc?1}?`>2^PO*Cm9|L4qN+C#=IS7mW$|B$kVn0}Ob{V8}`Ixrh1s}__;3Gf=z@aAkr zVrD%-T&w*x)aCMOP%63WDR4Cm>qf>U|3tK~CE3P$4Ayxl&q|PG1j=a`lFrL_=-1mi z>Y}W?Gmc#+DxMo`NFX={exYVRU4n_CY=bpND>Qnx`4n!}`IK{va2TO1yS-)$xynq$k5{vR|EdN*PNh)yZqVVMa_1&2;inLSnbn96Xmv z+OdE$C~q%q! z2t1yu!Uu>0`ZJ#+yOj$Zf>)q!fBC-T<2Rt)FW`SRey*+|`k?RD>^-=DxA6=8Cma9& zp*{OweDp&32?+sykf z@Z;P($3f$W9{;4+YKPGGN^1?2DME&3basm5mZQXDMfgFdyDIq(w)mn8zRV?%Qd!b#yvUkw;GwD2T9i5s!-`f zgZO0v-U@q<4vHl?w3A9Ye@>R`ABt2VUYKFZTi~OwDtDH-m{a2_#;ut1NLRCJMpzm7 z?fM(vyI)|?wj->1vUS?{!+7vl=g4yU+B$yH74=oLiUN;4#;j-+H1o?za;BZVh>Yca z@5(;^rRA*Z_Y|>wchS>)n>haGt7+c<Bu!(&J5$v~txS@7HWx|kj%qvoBdD=gp zy*$C~0Q}%w%Td!&(@5w>TAYQW6!~a{qgz@ehUqj6bcDl!KS3iGrFh8H5hy@{i0 zIqBpRYzrPkkI^Qrs;}YV6y0Ry7N0~vZE_|2?*^7z3j$`r#!z@F#EM!CE+oWPG|WpI z49}P(+~rF&eJZ>(=jM^mk+>8UR}!j~Kej*VeAS*X^yx(Ka(h;M9YH-N1~^VyGscrL zIQ;{E|K`Wvcizcb1E#Uc(dkq5n>Jjl*YEe=M%f*_q7lMfi*gB&j=5?64nXH_l4Ac>4DZxcg2ECCb*r5v#By!i`xrTyg zQOQlsB`J8wX$pgJkv-%j{Nt`BDr~B;M<<_%y4{YJQ@`QgZx_cavbgRrJ$-qED5l%i zWPlqsu&WX`G+(qp-;!st&%#}vcg^0nypI?ta9;SU?=S;F6ii-)>skQRdo^~pUUOg$ zd}+zh8Wc)-iUbLziM%-r-@yWYnNlf$lnWu(0>#n{AfafU7Fa~ZELiA0LPGjPQ~Y7( z8*Ea>4q?k>hT81p=hlMblw$^m7!x?CBg=s!5XyN>Ut3&+T|8$6zQ9=`6M2S`wwKci zYXPr!RH`O^r>wyjTCT>+DZ8GtoXI&}z;h1sM7Tr>#iGs!(J0)`T0e4NM|B*rUH3o;7w zQe;s3Wq|CZSpa6<9Nr;qN}RzmD4lc2uN4AVN>({hP|oGkqf{<0N*z)m5QRHOJUOY{3F_9I+Cmmm;^Jx4 zzImB1K6X7~P{YpH@r?r8MUwrHBsqLNw?a@8G+ImOf?-&=IdyZBuoMoq4cvOS*xpO) z9ni7l)k|`*@*=WONDBHdslXBQsW4!_EA6C%s206F_LZ<9;G*Fygg9{k?xX85$oNeu zOFc~!=)ImT$Xf01S){Vu-qQ1mFNynp_%;Zz8DU?b#K{U~FPemws4+ZmhZ;wR{j1Ovaf zQ|qYsTa-K<+sf-3n&5zL`AV2e)8{JbZ8qK~|A(>j@r$lLJj?EVIR3Bx38m)|eW>VT zrwr-b?LrWjLv~kSd{Pm0avV5xTmHE~rwQ}j!?^h}5fskQl1ltB>K-yL3D$RW#y2g2H#dhG zWTHAGKMWx6oV8+4M(=XdE`e;*u}NwmI~g1K!xI@snFdjFBibW~KPTX1mlkyhRS!3MDmWxva<8rfwe;-P)TuT+!aXm~`LI{gH%ZAXzp2^k{@F!rQl0gvdH7~M9%GQf0aS7IjEtx$;^m&<7$znNzK{IDa>n_${ zXhKXNeQM-Qn?z0K-?5~GQ6SIRfoS(Y70(1aA?&1dAcWOFca9m|OV7t+YD* zpscZ{9sHslEq4)oD&#lPOSXTEt4l<>H^bv%z1ejL?#i1%aU!9+HqK7YzZFVQ%&lIn zYww|y_~V`^vUXzO0z4)_pxCl{Ezy4t{gRhx>?Dn%t*I`tq&)M0xxuGfo`>cBSVY;8 zJF|3R65N$L!*+riWmCAu%q`UHI6r?3+ZI$)OJvjr5~pdC%G&n9|1=~IYVAaJi|h(l zExwxaR^hlWl-Gu8=wb*gcI#=O{1;T!*_N@RNPvs^6?LO@M*H46_!5CB< zmgx>TdJ+5}QBZKJl8OSRbr?}BuFZ=|HA0ibNxy=_DZ?^X8#s*OQ!S3sj=t%^;~-4! zWHx^l=++1!Cc^9sY!lUeiAcLJkNDqM`TlrU1_aISOIbLXh=&xBshRj7WzW_MV(c{C zg2iL^TyHux{$o+hPO;yM$7J`4Q96D7S}I2$)`I!j48%Wg>q0bpt6Yn>H>XZe9w)m? z`l$NUzZ7zH&F?KelykSt?lC`9^0#KrGQvz$?4Ulf9A`Sy1R(l0<&NQkjFITnL2G_n zw4h@9Zx%GOf6X7u-kU~!3ivKuQ{KgeqJ{0O1-%NyIYfPm*qYx*|G24gd(RAwyuic! zP&^j@T;Y#~iJoTM2^wL_w%cd79a+xb_goriT-of{+J4omXiFtB6~Pco(Y52r01|vn zKAmrgGDjJN5sl{VR-(A4>yzK35g|J-t^+KbJQiZ=r&%kDn5|hR!sfP!%qtiJx%*4A z7m!xY$D(cC?6RF@ttGZdV=6NtW_%u7L<@*a1N%bt&RC{Q%rrdqeVb&WYXfgqE1ot3;--fNeCb*RHCOb&;pVw zls#fTCkSY@p)0J~%^!~`ZsHT46tyI~)y6+cO}Q7`N^xPqTY}CeC;Z>9;$~5r$xst8 z=ch5R=Mr1n2lWQ&jQ5s*=>{^EEza+U=4;U@74N0H&VJq8Qvk zr+Sco!RSAxVAaT;!8x0#D`sbS%%EQM9v?DyvD(3}W2a+({8K#8IqA{8vQ!2RywTR2 zO~FiKm}X)sQ87A6z6XI`G+h?x2u*eIx)mQkq$Gy$TNZJl0)DP#-H0;YtnNch<;Raj zoly{8E9a0mfG#%I`{=rb$IzS5BuQkmY>dlDMIAAD`nYZy@dLj!YQB7}(kFQ#;X^9R zF;f#1bv_2UB3SXf!kMXdhM<#%{u<`ek`wB#wFIY%Gc}nR;;ux5bP!3ap(HB=)*hmd zU%ap&9{zc9FNLKF^?s2!XcQa-`0_BIft;BL9F+INZ^SpI3N^>VmM?o-3wm5lng_GuFLqbb->u~>KWnu8tvuaPVTVb$0zCnna# z@|hhz!2V~?l!g6CU#EqAI?-C?^3XeX{F^X4H09IO5XbvF_SAX=;wA{TCKqT~g(w)f5N$t`3C;qpSfBw-WHqY=$KNE?0umCE_Y1^U`JFfe7(VZ z9DyAW$+y7#-|e9yR zcqUUh)&VSo3-MRU)rx#;bAG79vfucI^1UFIf##$|-pJeY39>?K+9=zmYu$dwrQKKd zKh+G!3N~jVavLl`6gWgFt1PAvbC{B++9cY6DP5lk<3DhFd3$JE7TYBhLaR+aLA33* zkuS4DFr6eDplSYyPcH5J6cMU(#jr7&hsBOezjiJaqg{`*r7uA4A1JfErHt6te7;gy zH$l*HLcyzv#IXMiTyFM(fBR+d)#`fFBJ2PjmzVnPTCc>l?R_XCFEGeT3O*?uU|qPt zG=@7^QMKDPSrunq*lx#Xs!Ac~>NbI}PLG?V(Eu$9yHf(%22GqXm}-aFE+W5X_w)9VTXw_cis#1D-sZ6_bzIti>x~ThJO9wMqgEe#&jx?2WkM_DSO|7>4Qy$nMr$uFVmn>Ld(*%YcLZ} zwTd++T2m)kacY+cXRrXT!e)`@I!l|e&OXX=!tb;h9Vk*$G{z!6UX9b&HU!W}J}k3K zY)v3g3EXf6pk-r-pw;$f1EWrs3R^uC|Jth;j@-W=f>JGwz}X3*RUL$99cnanH5$H5 zB${r2E)1IY_En&f8B+4u>;rC1Y_-Soj9pWgcgaai-5MVM#dtPlP?SAv)fI{1h2(f6 zbGWe}0!%eyof9#!XkH)ldRpa54Evq zXwno2rU# z$!9EdPm9r~rLaTF%zp?pWH0*NpZcfupW`CUvup4q2BRzKj=?L*UG6WYPr|kCI%v>P z(I{=guX2ZN0~g!mYXr8Mv$nXkQl+4?mId))koBgyS}!j$6}vZx=HG==J8g($I)^t? z?(dwTlUt6SKdZkK!{d4LHtrd;luQ`>kv|>(#4D}LnIS3<94*eaeS!R=c$p<>pnD_! z_!0A+u=_tNUUL75+V~IouZ04 zg|1%k^)tx5KUX*o{qY}NFj4+-wf9DP^9ga32Iwob7`HJUJ#Zh-41y-59TR^lN2>JD zUEk%HLq4=~SH0MBej`QSyVXo2W?#o-8&;-xh7zYUf{n;ojpp78ZO9J&8jjfoz~t-e zmave7g1Fk!A=)=g_S@jk{{{NJTc85n$tU8|(oL|Nb#6h=ygqG@6u~*kw^SQc7p>Vc zL7z^|0D^m&{%Zx(qqB`Jz{Z0dXKb{AD_osFb%%na|2+$aNjgNl7)2jDwPWo`a1PEe zR{&S&5O0_HlJVFD9ZDI}4H;5G_kwY-EIxXGF_;WOeX3SeYNY_Voj`Y@dldR)<#EJIc{Wv_x92J?!1_*HP_Fc`i!)Nd+`BNCCa@ zBWEMwg*<+Y!Y9^0^LjzGfKB6DL4W?Yun*b)WM2OlWA@)n?EjY4C%zS3rG?fn-<3;h zG(#YF%) zl7LptA}z1`g{HT+T%Vnx7FZ%ufaH#I!lZM!dKa6G&1+7$PlERgIIO2qfh7*CLfFrkC z&>>)qn=N1;$qud6?E82+EdW$AA{?QubeI=`(k3*nbDHO1-z|l&K}b$b114X{*Q%9E z38w)@M8$1p7=7ZPF-oLCB2vzCT)={>A&Dn%mg%NOx5ygSh{;ffa?A>t5e*KCKu`YD zmRKcc7BAoo+Q@*tnEw!h8gar9FpI>p7dwQnFBp$;QMyQ|k)v9@S?zqaR0bj<2B%qT zL9>hor5f6og!{`{Q2MO_M8kO<3S*(Y0iwEf zO^^o$Gv+kt`gkD*z+;;hV3;BvNs$r?w*ReCq2D|E;7Yw@+5 z+6xVKGqJ$LXq52&Rk2&~Yg0NT{YkT-H=_RWZu;EI$>uGYNoD{lB#Wi@_{%xKIMqpM zYHrT;qJM6fk>|)I^g**}NSILGj0t)T_cQ|im7c^icsjAyLs4&CL^Uh?XT8H?2U2QV znZr>Ts}`|^hDi@|8CIS=6Q-degkcFdGtt0h8IySQ{VV{v?xO7?g|@hzJ%q%h4m$1lImQjADEfL;m26fX)E%!0_u{NM_+fI{fnSe) zN0dW_)8h|ytP>QZCdE}$L#>Q@zZ5ehRO~5D+~Z^k!dNI*A@`WFlF%T6+aSF9o>!%0 z5h@BsAWDPtovomg`u=8#d&EWI2T~R4qgH4(vAr<@ab|UKHSb%ilDaAGCf6LV`v{QF z%u>s$@qoGR6ktgcsf*6Tf^t|CwVadK1mzExen{X!nYd+h45G#&rRWt{QXD4Kd@g2ne_ zExTc!yU07Yows2;8*cA_p3!01gQ6jRnmO^(g7|ed;uTo%>&tNJOzXPuRFr&w{S z0X7=WGwY!t{l<)M3lniIbBy%WqfX$uVAsS#!7N!~Vm>bqi-*z!fspy|oGMD7l2TjP zniA$7fmKF0v>y)|d9_jjT$^ZlGoKJ9-Zj$%07pJwI@{=!DX>)T1hO#_Hm6jwXj}X17 z!-P&nn|FzLx}#|e8LYG_`qtVnKZ?J&-$wB>N3mKqJxgjOr zYavAvu?vMWV%B)hCJnqqlhIW)?;bsaeB^-wH^(3Rs@#?cOW~9*(LASr`KHtsc&T(^ zcyBM`(R#J5+!g_gz&Sa!7*s>t-jFl9aV~KW*(OTRqNr-5gn`0>7+I;R~iZ*$Q{W_L5a1A zir1^5Mqe7Eb__z)S5>Ko4j8={=eS9XG>S~B^2WXwAc(p7$%^KrpdcMr03bVNKzZ8Z zN0HsLgXEc9*%>3b50a3bRiyL|?vgN@aOOFnv4@o}dVUXZq@lWRkeHgTr{ob8Rer_v z)-F6c!GiKuEJQoL*_qcPbFRYT$*?@u#74U(#8EsUK_DGIF-DOMZ&e*whx8E01=XK( zN(btj%t#cQF*v-JWYE96Z%(wzaJ)!w1;bwOLsF6Pc;kW!rS>l*nu;3F{U|gtPxAgF z021_|xbf3&OpQR}3dWhGoHl0r@^p*U%c;%MV;IOVT9K-b=ZgRto(*N#58T>qd@D*TR7;3g%t&)S+swb?KrO?oyC&;D|Fm6n8 zr|`cU(FxBdeD*jOCcI)%;Wc6U4oun+2$o*~eZ_nF@DeJw-w61;>kOt8UPon`V3{-)-~ zDRK0M4HwThcX#18BbijFG|e8Mk4a@Z9Kuev3UCygbzmqJGb znsR%68feZ0;%h0boPS2vs<|1h&tkQ=CK|^_WZy*=FWCPvx_?iv^GqWE)<~*IvH_Y+q3o)6tiWk} zLHCglL$jtIP#GLVIGA5-EoEdajJrZ^nTpS;>MEEtEoP)Q0C*p*6)Uc!4n|a(yX)+5 zyt$fUNNBj6gtr%rUT#m`&^QH5_z6^(-g9=A?n--U4!YiS%Ig9IcR&t(I@`o?ogr9U zndB8SzK2>Q3)v%LW8hOAYiC0Viyh*8sf^Gmw)`PY zzrnG%$Fu+Hnw62t9U@}#S7?NM*bhJ81VH>x+(bbC&zh}UcDT2f6~62YxPGZg(d~nq ziLhJtA*LAmEZ{EHS8%@1zwskn{$5|VNaWY5iKwJTqPCBb-D2uCR0QJCO%(D?8YwV)W@`q8}}ZH#obsXwj(? za_{P-zhqi&7}hWF)z9#6Uey)J81{%wit<-e1O8Hh;fg#!ezt=@ahBj39zcLul^KQH zVl3eU?ykvIe&rT8Lez7D%V~J<1J_d_wbVGl!eO)DuqWdorLg_j!lDzWt0^c9Zqt+t zP*IszZb7_=OXgtBEWlvhiGN1EW6N`3a10WC65p6fgze8hEPcDl>A!}<@Fv*8`WOSZ zn}I)M3WZKfEe$ABRD*yqkjD+FNhux!EwA3*1*OI4E6h|5BqxK}t^-Y)M~2ZiFRs@6 zfifHy-2eflTWx&5Wcbsj2iT-%N~Q+j{VdUx`^O+knwvtHh&M2l_$f*ui`&PMhr6p7- zxN!6}3!oa`{{XVaj|zf?Hro<@VSwMc9bH?7Jt~pKCY#G&nKfwm$R7VOEH+3@dk?2C zO$MlO@kn}`2t-XaA29P8zbwbp&$h>Iku}KOEmtP{FmX-MC7?U=!y+axWtf{OEb67@ z@OZ^EI;*o^l|3v53d+%2c+xDyOOYd-DjL%98EOTY%>JOZ;K=G=8tkm`PvFeh4tx4T z(;q=wNbpUW=p0_yKrRlL=xy4?jqh{}n;S+hkpOG@5hhc$wX2=GS()ZK*^Tf8H*DR* z83gKnB)7Q6&0(diK2?k_nWpnOwebnl(Gf7PQcn*$7?bQJ8g zddHx2VnIHA1@tLyG_@-9{6g_^gnPxo0-bPc+K18V>h`f zmVyct(j@~2Ys1)cSJ?w+Rl%5V6XccT6(64N*s{H{d- z(MI_b8KHjFdeE94Y?_Zhn+|lE_<~rrVhqo<$vAp5cEzv_(7fa4`Zc{iV87mYeL`HX z9XqH#%-bsm3bNk?7P;bxb`0Geh`p$Fql3thM`AC?42<5wucPaT=Oe^Rh{VZvaQeu& z$zOjpjc0fFbk8$foRK)6-xX&vHpJCJa07gKMST@LAl0%IfRWR05Mz!38B3ul4N?m} zlNarjvbpL;Q%PP!TdU($4h!(B?A;Aamm82;6V0%+tV_f-N6ef^Ev)`$ZkMm1Hrr3O zQrkuR=M(kLw)H!vkbYP%C!{X*SR7Em)b8+-xsL9aCTsUKIv`TbY=v^oBj=DDh-oAo z9uYKzyCq46kJkJ3`0Fbi0rPi&Y2O=oja2=Ksa@jf#HyH13gZ&Bybx?}T^A6rXuwwQ z)yP}>IPvu0D>PIMA{uXWw%x8h)7w`B`12-UFvDuyEr@C%-%D58{oKr^V*icF%Qw(v z+aH(>xZ@L~t685x`R?6wUPjgSb_VO-n)4T4`ugE%_DafEfbU>;ID+yt^~Aq3~U{olpOSJ9Q6(VaRmG;I-23XRgyx*HJN!iWNq-DoRJ`r zBho@b6l}s}5N3G{NivYX3NxLch;Qj}IZ>brNit!5Lb7-2)6flJ@V3!jjMj_83_FN1 zEbH)I-2p zUkSxJKYsa8507Sz$Fw$IjfK9y5F~d#ACpJ#?-9!w(!m<@i0>BkPB$6S@8h}a!-Jg| zhCHUO(1c{5E_sLOFok)QyEmMXeX{~aXHAE2;hNnLAwDLSwWV8K#f+JxKNykA?3r%f z7x>=slwJ3Tosn=^T9SX-Hw@)_9FyIFzXvIz@Z9#bAP9M4`Ly9Jk*p`!m4|Vx)8>J9 z3Xcm??806$Mux$Y?9XHw3@#KkcVj;5^Jq#TK=)l_`3VC_0w;m3hxXM7c;;nXgvVWk z3q(BTH{@Qw%EMFeC%lRe^oQJrx)_(~GUtuRHvD13pPtG{Z#XSk4ZD@Kg;+1BDEH5g!PI~K zkpRSd@STlT!EO}t_pd5Q=WCU-ySOXnV|olOE}{=pOC zJ5Sebq?MK%0}xEsm@lk1^wI6^0p?~F((EOg^95}Nr!XH>(Va4rzf(n7E1kzSn=God z8JJ_s@;IvqPLqaCtexjH4GZ<{8wX(A6YOGJV&+X7=3vaaz_~uu+#;ITb}fBFwI+Rn z*F8wN#9bN+gzD-^?uZMM&Iwa(M}bFY;Wp8NcpZIzL24fl!*kL{LP{aX&QVyCo zYonpc257T-iK_O{f9<+x|5-Kvj~2}T%L+POUCn;BRc8nwRBwbC9rRnH{3WH2cI~MXMl&{uykr__lMH; zwfhQ!&N!s_M{|*0ux<1>LowEk(2;2YQ-Qw*VW>POO=cWFJnB-honyyMz{Vk4XttyM z+JP_i)Aao@^Rbyl#4+=yCpYkI$UD0BzyN3iHpq6}x$n6q?jZ!l;Qm-BUYlku^L<|R zq?X=e&ITc&U+E$G=SE@s5Q+IjO3~3Z*4b~Kd4EQ4!ddp{HV#XZ$4o{WR3Y-dca6)&!4B6D_fod%CJrYa%b)XtP^Eq;BX66 zlgndhG=0ke?~Q~smJu)?ZLN8jue8}#kOtRNyWBp z+fFK#H@0otw(X>1+qNcO_vyZ~);*_ZzBT{h@qYH+A&Pr&^(1MtGm=XJzIgAdF}exl z53{!2Zy4mGKX=?w{rk<+CBHzffpdHj-rIlRO_4{t9fO?;}pn^V|=2yDBik`uQW z30KO(#4=mOycftw8%JfbR0$FK#m$R{Wl zHV#wr>Z>IzBbEZo9}<#0$*%dkbo9_V-IQ4y`Kuq5f;^$iGRh8J$MX4d5*WF+Lf3aU zWlXL#%jFZU`RSlLXicZmRfLH+%EMQ}lZuoLU!L0CU@)mK95_)J4mf&xddRZSYu(bo z-eTzJa)cou6Nk^g&4np#v=N7lD7_0Y$}~N5cNB4^KEh!8)|RJ`sPztVDLAJn>)54F z*Cao`TidHCe~ZR7JI$YcCn|Lu1!mCdfiE5d*u<#Fwu3%kXp@0^6ZX>!Fd{B(#C(zu zu6)!TLCWkxSnojfl1<0^E^>U95l1M}Y4zQA%T$n*5RT&u(Phg@MdA=SJVl*y&Jdk6 z<2;2Eg>n(ghJaHF@hsa;k3#S`g&!dp00mnD9l`!Wfc+`E$CV=&HrQ6)Fm0XGM{~C% zsu$#YA`L>YnFodk?%U5ph-5+5B`J1{ObhBf)4Ij`f)?cSkI<*rwF(A&h5lb0od3CL z2>(Ba{(p^F6^hcfb3fs|)7b41wJ^UIm_M5VAtA!5iLE`AE2s()Qw)f6-2GyGh_%|O zq*|rm3t_@10LZ~%Kg$QJBlQ$CsjOtIv(??Y+_^j~US5)Y!`=1)Rjtto4Dm>DvBa!Q zYcA|@Mq-n)qQA4g^p|=UkHTA)=WcvPcqHr1ynbY|dCftll(xdfmN1q~2vxhLuW4ew z2#E*d-sh=&QtNL_x>2IvgXM%SAd4?GdI=}kv^r-(KPS)La!{q5$-;{i;@--O=5Dar zyS2+2QrHb}3~7GDNQl>`Ov%|1zFk7&QW#p4q1x(+$8&7$RrWzAQHY@64f&3gMrxzp z47@6Ufdb_^Q*8$)9q62~1JH`d@Y$PqABjZP-x{<>)-=oMxk_iY|FGCGN@a(VPM1PD z%p#pEN#!=G=9CC&#*Ho4^|4i}%QLeEF zSLF(z>&|r!nMQVB0h+MYBjcmgjeac`{h)$2d?X52#h^x{Ho8J`=ywDyBhQw3pU-BA z3hS2}ck?kwv5GWFCmF~p%E4;wK zy)2XfZ(lr??*E8@3jUpN`>Uv$8~#%k=3fKKKWprO%2$p3VtWNPT9qi%Qii$-%1LyT zlT%87_DIf7|IF9Bn>co%woF=frW5%HocaKlW+qNOYU3MqD{P}lVzr{uR>y4U7d$o#Gz=tjzS9X>ADCZ*5;su)_Jmq)y&tWyh)LB8~(Dbs#Y zX%{^F^^}x^XHnfCUZhq@@W%K@qAB_sP2=%AD4ug+yry<~3Q3D#qO~e8S?Q%h;ZyP}Eu5?;F-lL>RM;&ZHJn zU`V7hZd)z~`KfCW#TYghM0kO4G-J=3O)7lWDVptzYqwuU3PmT*JxVjMT7ujR3k&q~ zCw^Up^>ar9*nKxZo0*{x{Fp)Z0DUjdD9c$W>>(F#c^wxJ(6mOcw@LU&2lNZqcu>L3 z4U1WrS$&RGeKYk`ahO}^xmWK}4A^>{)oYYg%!mz;)Mg=kF2NsFf*QHNlVSElqz|S9 zyLs9aGq@%md`a2{-0nrldF0GH)>=5RqS>1#Y1HNv9t>hx zVBC<}ktk5bM7;B#i%6e)H5ZCYyQ|tquzysRA&DMo4;f8tbmttoDOkAc#?nW?5(ulo z=3V0&l>pJ^9kTtEn@TJ?a#UY=iTvfw_dmA+p1+fu{~Hza%arNglg~ex_kUt(R>|$H z@F9qi5ou%2LGEK?XW5y1m`e!If~C=$m@?E?ONnyDDydyb`2z6dUSfk96`_IWWU^kS zH|LM-R8%llQK08;vK=4NwY?9ylGgb?eLk?hmTobD9)s`lUex_8`m_{J#383oN*Iku4UQhMK;VnME2)GC1|O{|uQGJxmvSjxEz+Br`3A>5ain@&v}z4xNH&w(mRUBIpHQ-ah!yA&8G94sUaG zU}MObFINweT8Ls*&Y34*LThS>S$~LzO5Eb@Ih_~pIJ8ZiW*$%LZ%exOWg0CXH#-}y zBa`rQfV(QwD>4MchAOgG7+{+!uMOe^7JLrN^%RDxTQP*gsHzXJx}cK=j@j24YQXdv zCu0LPdjdkTZ_L|Mw)8yH##}c8iDr>DWEb9(pP$;)XEZ}?N%h}E3%;p6dkjmkZ8Yq4wuG~#K`Pt{@y>x!jB!}^Sg`tJoO}IiWZlNNiPg~!WJ3v%;ZM%=!(e%dQ13a z`XK=lKJ9^u=1(8>n?6A6gCY0E{sS)jpf&pT&O55uDg6^?recjQczo^=x<+(3nk0sV zCy?;-n>uIVX92HFUHq1?)DEI>^V(3!Rj8uh1MMsHv1g2(p{h{CTiN~hY>Ue%d~&2k(x0ANXh3RienR&Y zu_;K}#oy!Rm$cA`Qf4v*PY78ONkq{M`CviayXb}m;EDOm%J`!#fsF4#a~HB=3VBTe z84_RUm5x5xiNT*)(8>Df6T#?tuNVlQrjzitp^u5rrS*X0%1m|s!OvzTfPg9eDhi)q z|EVZ^ea!#g+h_e>X;T0DAy0AhFQ3DY#6%smZvW%w0TU7I|h z^#fzv)XZ7B4-|Njr8#Fnng$hSjj_7FTEB7AEoQaqHiu%Nb0lc(9O^c@i+8V(3Je${ zS&)S2SYnf!ibQ#szERUyjL+Gd?kd+5IwYYNRwXJG^6B1gQGUUFDSVapl?1K6?dA*zM7HA@xkO1f!T!o{tC9mGFvj5NG z+^Ie}If~n&Wp+=n-UxKe&!l+$=gVK$eHvtNmKoeuC&8~o8GlwJ^qX8{n#h#qCKBt` z&sJ75Xo{4*ja^G+@-%D88XQ7$uHgKjOFVGbX)Y)%Y6Eh2>m?Qf*X=ddQw@_^7etzt z9auH@UDEU~&g}b+oz8Ix8?qKh=aDe8IHu@kvxaB!^qH zfVe&q-vKpI9>lyvDNY+i&xC;#zjuqK@sl|N%zukO^Wlqo%_aA+zc-Os4A@f}0!NAQ z1x6qqgWU8dg{p7vAdWDkDl%6QzRz|W&wnECG2m!w6F|ZDL6595*C7)LVm{x={?+w3 zEVnJRzZM|K|G4|h|D6E;KmFwWJGSGkZRb>whdyltGxGI8(4jdSYxK>yaK~GL4C#~8 z*au2?v6gLOwgT*Nnpm9AhF!L3W*>k^t?~5cNYBq%K?KZpfX@V_xrPcP3UheG#9BUg zH}6{xzuXF)eLi=ep}u8hYY%y{s|zAsE*>2N4=OSu2hLHOsvW4Ks-dd$8gYy{MDBBs zfnt<~M-fv~O!gInH@1DqiPzB#;Jx&?6rVk%adjf*`}3!g_fgZ#;zywHjLlLf(K|0j z%XQ%P%Oj$&5lhigS4tMw&wk0G{lXy0VZpQlq@3FJGdm7T0rTlR)&)QB@A(v6`Qu1v zGA`ifT;%6bgL5Ht@l^~6CpXLz9VBoP8t0!Ty1NvaJ1`~ep4k$x7whKkP8%Z`Om?B%b=F(pzDYIN*v}qf* zOx|#e!6c?p>sFglk5SWT#Z*hcD7s=5Cc-F|5a}!Im2Tn*g@$U?^yx2C7J0Zdl zi4Rje+;ZpRvJH8nU_JI_N9(mWdLbTs;+An+IbT*Ubo6DqZw(P`%(Mgyv>o_rxk&eh zB*MF_R)0ORWm42PnyTqcp;9$oup^>=ijs3oyda>cY%sTah+288GqIEve6k!|kHjb1 z@mOm!Nm(z?A7|3bwim%-{b@D9w6+~Uwd9#Hn*&`=vk0+SwBwmMW^X;^7{m#sZ#pfi zXlVjiugz!)s_6tF9@XD$r8ZcEtR^llw2ifPU|HKvqVVMH&t!U}o@2I0KD;oxsJb>Z z9$4%Vb1T-Vvd>-oRyDTB%#ZrSf5#A;F!btphEQ$~Au@_W>`yKv+ZtgKqw^`_8=S9t zOY;ep5Pk!UT7)nGUI)pMCc|qa$fIgR)Nl+lsyViK#<;gP^fIqDr?jwcvBvKi@bofi zp3%m0MF!dfyx9X4*#%v2C7XpF7`=V0YdJmahFhD1ep%rO?ioRG_a+&2^)5aIo;5we z@{s8okqsJGMa<3MtYVgU!cDnv zC%krRd_P`3fWNVBtAB$7c0=wq{ILzjBb0?5{H2|3T@i3j=_J$qEt4Lcb3y0ZDRiRC zK#>6Z<{xue?3g}9NZUgP)n);Ahe552Ej4jBCFp1yhD?IH;0YB;+6R z_1f+zI+VQdyc@~0Z6XvgZsyFwfxs!|cL5|IeKth>oXHCse)>;jqO z6!osyb2al?7Iftz`)+OXA(N;lN)WF*)T@-@VHWC~>@N6!T4o|4UobP``oo7rZgJv5 z-2(RlCL1Nh5}-4hlAq>~`zu((MxN#NH$O_JL$7^H8>Kp%bni7Wm?#}m3GWEG45lM2 zjE=H^2$m|w@|184rmY@yWG7xOK+DC39>AE zVFJaRkZ>35k*2T_PmZ(G?8O1Sg+xWCOuZ!)YrjC{n-yA{c|v$>?Q|K|#dDZI>c|YP z&r>7rMaof$GDLX95P6Uad}~GfAs=l;ZBX0y5)ydj z);zZR^F%k!P^Py-&>_ttG?w4FAOGQP;%B9-NFFeN^xu|xz zJOARkeKPGCmFi->l3?TbFmi+P;5Ic11C&Sf!h#Uoo8mmpUJSSOiEg;nW8qM>xK$^J zM-uLC$i5%O{CpF?Gfnu5EMMej7v0;?ggoF$e6X*ptFn-?RrJYI<@bgbq90#*_e+_f zyEpi*Isp3bzFPFu@8+3*#QDnNd{m0o7~sGdgBSL1bav?`GUZ5UR!f=UKYN5YV3?)w zfIA{fO0C%}3ytf~3N4pu7MEDY1F!4(4<|o5|5Qh$T54Rl%=!E&=YmZ*Q=i*dc8SRN zMf;=lvqiLqSh07YY30#dn3G+T@v(D!QeL3vlOQu{onfPw7o1L69KIWkz+}s- z9^)r`A%XvxX+)}v`^>*)8npj7)2RKendZO4GyY-0{4bD0+0N(--T0S1xr((amN2pp zDTGk32B93Fl%_%n*bHq|Ly5crKsf!4My|BDB5s0Med%n_J7+)6S8Qs=5t-+G3-0PE zZJw(x4NdHq0&!4A2A6B*Vdq4~`)L-M@AqbiI;iz0YS6Fqo7AogBvW%-{~-?F8`j5t z?1~qpt{#6S9cfK`|2we*bcWCJod_xV#U6H3{w*cjsKDm-08S-VB8AoFoO_PJN~`&6 zZ^PHo&2`^P{i(g%yK~%H2k`=#UplSvc#3}9WHOkgbtHP26SQYKj>)kp}`G)EKw;`oQ)Cs4DfvIk@mzh=Glwh7IJ`|o_hz!)($xnrANi1YRZr0e7zbkJ}8CuqZzg6Z#Jt0dm*uF`GH z3r2Gm3v4){za@rF_Y!PluZcCNhpFqWjE@xGZjn(=Hyj0v-{a$5l8qL7xG$6~TeQsc ze4VTSr<}ATlviW%{Bv@sf0mW!A?c2fFvN_4UwVH|InE&luv~lpL@-1zk7*ioI#6O= zON#T4oM;^21qIX_(3eJa(*q7sfGwrnl!qS3kqTVEH~u zGh_@ghM`iE-th|zYVNkHl=tEoqKzr3i`@0>94iA+c7fE9CHph0c6r<_f*HkZwPTN{ zYw-lBiPPpRVW&#Rxz`C^qmO=G0&EU{UJd`V{d*fs+c>Srwm z$s<{StrS1iQ33Otmay)r8wIz99@;cg*o-$r|0K?>bejtu6Ed60z5sz}Zo}CHkhz=S zjB{!aN0eVWciis2fZMd$tsR$k?l9}eD3Tf{ z4Hkm;MTf{O^G0^j+fy2UxX(`ut2eglnoWe)027A0nYuWqUqeSlhd+x0ZqY&J(}eP> zprE(E%zDeC7O;KNu^8(6geI42WN5p63YS1&}0iBV&v6+QVXoOAeV`#MW~FPN$#)aIZ(P zm#<T* zjV1(*NxCuna|D%z*~{_OGolwDQgTDsX2eEVVgbyY6J%HN$gRRJm&G&8Lo{YLWhn=o zHbU94^o1KX3jD-o?Exd;E?Oh2-4`qg!Z55d5b+vWJJOh*#}#RqXWuFukz@NBK8Vx9-2+vx-YUk6Jdj0==3H@86frznVOb7i)JY~6F_`}ym7hOsy=S7W;Di}~mD`lZiq$E9Z1W}BY6RCB`qFO6dqbd zknkx2|4F@>w}2Ke#r7Pm(w00#mVLMX6z3I3y8RY|*T!Vh5NI!**i-J&M{G0qww{Ep z%NEsBDWEFkb#Y)H3%0zE?c8jrsei{-@+lH#vtip4)~Y8M{jC##w{#^4X2D?47bS6R z_$GAsIUkr65|jnSC>xTgyL2VVzo&}mL-X`0qUA%i?TY9l8=aOX&$0opf(XIFPY!L_ z0b*K)dU;RM%X13%tkJNc!=fYDj9+g4UXsj*p&Dy(`7K8$tDryrXV%H7s>ch8ELW+71D8a6TuwS;Ax|ek5?Z&m zx?hKQi2vyTt;Wk0(z4n%hZy2NS`DMWJfC|#Si1KUzkCdstxb?yx_cC2a!1RYalnGR zlHqCuhZ%J-R^unsE9SsBfW6EO;5w6!i7a~dB+{oNN8}J#o_X8W<`7G^9VN8-IpuZM zo+U4W&W1T@UzNaWI>NhHF)2^X>4=Cn__O}X7v%G~@y6RUEcUw2$M%sxhV8>rvmC&O z^l$^j4K%|n^T%GS#kBN&)T}9XFQGk-Cz@}PIpNm&XOOPs0I-Fk7Emyr?JCBPz^<{SphJYleWFvfLegz>jL%-C@5^^05|XBMftO;wjtaaYal0BD;I zEcV+Z>hCfnV`%3R4$)a4c}Q?QEH=HKVsWNE){>T6V7b>YQYs&YE{&gb&cTIgRmFJR zJ&D0r-tH-FOuE}U`zd2Yz5C-xD-!}pGRJQ+W~gppI~Ul^@a!*?w`)cLWKJB@0o(cF(lJTM|-xBp@QBB4( zYz<59XnO^yRCeY>UpF2^dRJ1q%`kg$6{bdHhPL zw-d?i5xQIO&@dU|hXmzHu#@uP#9?hz*oDw z8dfrno?GL-tWI5p+l=g z8*{lZkPXufZke`lG#ML#=*Z8Q&$Tw#UC~2mi5qkfah@mKPS%+n=%HgA1Il>io)Q{$ z@or`z4nH5qMDym>k03Lh*o%6B%!z2Q`HX=t^5DKO*|Py|(GXo4+VC|y1^HH{B9(Hj&kVFWlp zNI!e!)e1BiYm`^?jElGB>RUhV6^RwTTbGy#VJlhr%S?e7W?|KwojgGqyoWz1-|okS z6l^kB7P{SLQS)WVp!9Oy#}Csff@zb?0masy2;>~;SLoh1P{v$j&lZv<;0ou1oWT~v zT$6=Vn$WRziX!4pA#V`tAy-2;kgN@kr&6rrTjs>T9Wt3!r+b`_hUCFWu%E$^2#<1B zdEy_g#UEk%#HA#Lrw2&$z$N8=v;L-=k=r;-Q$!B&dphS)2Lh~#%N|7+&Ta}yZoH$L z@e+Pm^Ozc4XxpFsCNj7Alvsi?2%iUh75HU^HbVnJx9mwH0;(DktuLso#WaQ=ba6}L zr!7yGc^%d+r_*inRzqA?$R+C~{aK$~`j$(MOoPy+Zk1we1P3_&uq#VhQP5=|b_ca6 zo&f1S{^me>!N!+A0`3k8dQbXy=-uB4<22po@ez(pMoZxeR{R)^1`tg{9CR7o?&he6 zf@_OW)g@gPiiHA)?MUV%7&}@q{PojH&@~K%q-I$y^-G?RjcWs3OsHsSVK5)^ofgd- zd!OWEg!vqD&X6*!OZMgH18pu)4eW{q83E*SfcH&^nKJP zU4xJ70L!i*!Qw{(XorA^V+1695i90XLcwwggz~* zgB9|_6negW3wQ>h&x+^(M0EUK9~pyfNQBYqJLhbSgEwvRBcYk(T?xLvE4N(yRouxr&m zCZA)(b8jmvWI zO>dRHF>A}bA#tt}JxztIu*M&i<8)vN+y&V|js;ztOIURQ95d|8J*`mxj8k6SSlFhC z-v)l-w^pPii8~j^c%&0FTlIyF;riOh&Sr$_4!cg(YPT^tzO_FScj9aSU!G;l&&7Pe zPH8CQp@CwUYvMwkV#jEB9E?eNya!d8OkRNpyr+X;B_YwC1dNWcGqyz)gLt_q^7o*= zHlb*Ap;IMfY|<4%q{&k?RC{0GHoj_q5?i#~_+>lz$7;G2_xmFF-B(WTk<{wlg(oBf zVHem2vg;MXYu9Pttt{t#ClY6Qve9duxJ7%Bd){`u#}BZ-_NHX5x2(ahok^bZKkZF_ z|Bv?TI4|U2?(+3P`!B_4J7dFt-su}utQ}W{;C*O)V$Mpf&*~}sW--MyMeR!!j-Wzt z#MV*I@@e`BF4;qF)d~IVfcLG^T+G0_EeZ{K)sb{kuYv^z;Lw$;D;w6hdn%A^W zP1m+~K22P2JcY||(D!ZA*K}Tt(V4C}6PdfF9)ilhT(%j~Fyk7#X{$T~VbPIH>u1|j z5#4e_&&Fb}RE`6Z&bOFsH3ieoB1}h5r>Uf#oQMlM2=X+40)%5}4_S-pb{D&4-i=kR z9}iFV95S!@@49Ls!!lG(5-HWlRyj5_;M-@Zn zW6jz$N0PbY^8*}ma|xrVIWv*Qq2A&*WuLFOFZI6$`_hHcdCClpmWAlAkG|e@8%OCE zs)y7v%mU@6b>&sprN|$6VE@6fjxK>IEV)neLIp6{ZBCOzRhvO@*D zcpVv71v*NXt$NgWSs>rX_I)vkN8L{?Gm6E$X?4~Td>nf^;5F)b`IKb~59dt(qv&>_ zuZSv0HVH1Rla+Yjds1f7&vuclE{GR3i(xxo#8JC2N@;CKKkRLUn=!k-izT$-!VP5~ zll&6@1?-uSuzZ@@4-shdSbe88`%yI@%Xh6oVcUbDL<2Jp~ti@ z$tOB(47aSVS}^Pm;ZF%CdnqdeDehi?TX>xT)M5W)GAiGe^o@4lq`h4V@0(okDFURu zFcGA^G($jhYO{crr~pBwkYcc<_%`IW)}AkhYM%ELJl3kGRyL1-$X8QnB_?jU$QtoC zWc&De@}ZbtC;CD^zDX}Y>B-z*!y9QF6~sR2#@r7vm;z7sI&3l|P|m=MV9*g2m#63* z{%C)agwq*|t@u{_MBn>_fT#LHq_Px6f1@s0u{GE+zYeg`O-Z`@W~kJsDfa#kg>#fB zv9+ErP*3*D0p@?cw@Ce+d-cB*&i^;I*Z)uJNm27JNamy6MOu?nWzd>Uulh`Z6_pi; z4nKdoo;p{uun-H;vv`fUe0kPQV)ok6Z4V&HGwH?S2lL%{L(&}52f3zb3RAE*Q06s<`NbSUyMU z{ysxt8tq8alR|>c+)Mj0bk9{23}o9E1Od_<#v^i0{rC=F0!>qg&~z?DUAqm0xPxob zUI>F}+-E;@>Rq~{ID|_BZ14^E);4cqGmj|Ml&Y0_87WEP=~a5Q%j2sYRlaxJ=dm-1E;f>0HPC{iIBsTWS}d zBe`JR-7=I@Uk%+cgErL)5H zmn&S>H)@8jtri;70?m(U+LmpWT4z`*9=`CJjdBiH7Jw2@UN61#pP!j0ZSi>@Wh zGkh&SKLZoUjO&I`ZkmJbdl_qxjLbmKynb*!YrF-=z&RN45~MY361)-?aOCC*mcmcK zm}eF<=7Z)w$9E2qLpJ|D1;ix}5pE;0UPWIaIH3brtojJXw-5_rB;(w}AYzG_>E_b; zuL}fp8hwa{&n!wkB7T2UhXgKW4%;gh3wHQtkL>o_h;#VDW;p*NHuJZ>EdK$+eDz2X zXD4TefAdSuWxjr&c@!zFbL2WfKtcKBR(_ZBg^R4t!+#f_%Vn@mO-@ceW{l4nyD({0 zc1Oq(^u=Jg2J#}`&CphBlN5x`;d43g$#lHfxVYrw^8s@EJ+v#98!ccD4N+cH9n(t` z*b>O?LQ~V=OMOnGdhyWFiTH&ZT0=EhU+c);p$}3I9Y3t6vJ)6`>K5Z&!>t{8&N5>5 zQZX1|)*9YsyYS-Du~`;Ck`zdb8oI|b#o>u9@7k118>oeIIBVAl7jUw>t7tuz&=WUh zc%Q_VNouyA;57wU+%y(=F5<*#(p2U*%4UdP${{`;I*U3(UpU;#p=wEI} zpCX{oJ^*T47MOC02wqwm9a;sHA45{9&LamSL-Eh$&yXIWeNStj80L*rtD2C@hle{8M*SN^xo$SYLz3c0Jat`$@j@I^|pHlCj|Gs=6`#mVxiTc zOa0-l%(@O{5W``oTxx%OUfMySK)5arrwdpwwthzgNI3M_xzj#ih?@{mv zUYCTgyl(*#eJSDQ6N&3Gm(Q#3m`d?XqNA-&K3+N_YXFiIy)xbhHH{uUQ@fU|Pe}`+ z&rE$~wyeLC{o|ruoYnkVGWl4nF)BESW^M~0Zs-dm$ud?Y+^TGJ;SChKO`L( z{2YM+W|KkiF}(bcO;GR{v6J!7BSx5Q*o#cYB?9gWs#~OxrU6^@XGA2e`|Ub@#EWg- z3@C)DQd!j|pPvam=LCP=m}I{@#n14F<1qcx1~$6;lqc{j;46Oor{XU1cZxgzf6wFn zug?t)cRlO{_fPLu6Bf*oo0o6;hJV~(EJteT8-c_JMG_0}H4{lBhnL{>>bW!`>QmKS zOuhXWh~bgUzVf1eTFY7h785aO&=PAuTiU#m)q15+IxW*YtxtRq*_gi&BW+Fp~s)c;WX5y7GhHj7Qz{Dc4m$nFukLcQ) z4Nj-u=I!>Qap!X(fG;{{3kAbBm=CeeHe?wuY&k1D~aD>}wM+qxuga)TakY2kR= zUIp(6>bATssm4(J2yypAEMz^&sSXrUfP2q?F73WPkcZR zI3f6X8DfQyrFZfPQKbXk5kj%y8GE<#6;Vcb3k>uW1|>R$KQt7^l0;N~&=_m&RSh81 zAi*WRnhE1nmNUDYJ;g!8_YjWP2$1Q^MPU{YZY6VS5ojs}4y2a0*$Odd8s!zE zmJr1)wD9DL)HC;UU^uYYX`P5hv04R!hzDsQUw?vZ&Te80CB zNNHq4OoS9$g<HSda{#tI)8pLuFMP5fYi0OKW4Y5OJy(r-6Drcr`51 z>lc**YcNjMOq7^Vf#J3R)8!jbZ-|B!mw2r0`?&%nt&NUlgP8>WbQ4i>z_|V!ACqPU2_osM#W8p!nba6`T1_Kv4buqy%=avEqU-UVQNpYtTDk(Q zHVB97G094~*WX6()dhh?4<+_(Qrn4wxz=m?c1hhZenM>adGuB7Y*G2|Orz0IrJ5({ zg1JNX8g=y+kR2{D4zFZBt;lHkWmJ*H3_QKU^J4nTXIaXnj;6KVKmq5)LQU{5V)B)u9{v@gL6B%I~a-{tsYS5T6Jk!&>0rby+31TyNi zdzizYx2R@LArEYn?fB4dVFO%t;JLIP1Rd&~navgHF{XK6z&l#bwW z5|3yDE(+PGoZ!~S%++&V#rD6KdHq1a%;OJ9&dY!*PYR&nptqrD`lBe8XCIOaDGlCs z#5^)FW6VAPv6#@?s=9WE4P|M+?V4T**(O(I+1BvO4qx&7hZ7ODq;S0$zOmWRj>ghX ziDJeNc1Fb3FJ}*OW?=^V6jCb~_f={p`bw;rUoPP|d@kI2n5i(1+;&P$q~Fsgh)Sx> zPOL!2@vP;BjrjB@hEQ6wl54o=R9SN65Q|857)Z2iUfYrNl6uvjAZs#r^q({tm@M-nW`cLyGSbu9uOmX#4%;QmE6;BU^37xvJDUO8?f{ipMX9Hrf}K^9z-&4=E|JYRV7GsmB9EDbnlIkwP0Vo^fm9Ed^CZ@xW{;00od{LYRSB zVAKWxWn@S)_2$AadqY4tz|LM!XX;>aipKtd-X?x+6if_Y&xIn(lGatT5s+p~O5Juq zMCY;*gisK@aXTO_)EeWlb5PvM#tmcm1rFo9<^nr5TbN=^bRrysk6lL<_6t+lSujWR zm?2<8qzD2S$}TPas&Qc?O-PShL`}20#jZ%~CMt~R?fecPAUiuHeh1szunb&4hdP&Q zQBH**E$z5<$hiPSQ(glbW+X>PL%a+U;b+Ck05eGdnfYzb{jeRfV`qRue^J14VCx{4 zMf2G<>2N@?dQ%RmGRyFlct+8Y!dAiw4lo*hWG>+NKFVJlvYb`AL?pn$^XuJw z%-RsL)2t!U1~km)xur$w){dyZr%sh?GGaB6kyozf@?b9rmrS(Q;{|*yHg$pLbXl&r z%4t*OK=b6q%|@Z=7>>zM%9sALN6yS`CS+{cV6w11=y@cES|v!p6E)+^p)kfUOiBzo z0G5uk1e42fIpaN$kk0D1EA84{;jT_<#^;F;^i2%tkHy$=BXQ#Db0ad$#7BL7bL}d3 zFrCviHJ+s74ewAq&OBlgB!%@S`{VE4Hq&!GWU5+^Q`YBp@HRThljrEjLFTYkb1r{S z$AA?+))6eOFmmnw#G-UwqFfxLD!&G~?a8scC<&HcosL}evLJOVnW%W`)cAw>AO|o_ z&i9FJ$GCS2?p`LpVrUejS18m*N1&~75e2@UP7RC&>YN(xOFQR5pu)l3RD_y3AA}^@ znN}Cnv#H0#+*j2wA*Gj^DaMR~@4F`K`VD{B8)BcHIMbXaM~8)axhd04Yc?WOFkGhD zP#p%SYxXfTjCRtSqG7Jvui$GRwWS_3+Wt6x@DW4`nKoV0r{ zA$p{?H)nF^(S*j@K*Kt6p=K@>4f==EAK^ox#`bj;f^cPN+-MOywNSb~(gMw_l+zOS%y{D}`8e*_hTM z!Y!c^^{Fa*Sg}#mu(j9&cYpC9)sJLmbOVRypu+7SNBwp|l1vQ!-pFDolIe8C6Xi!I=C+!<`3-e z)Sn>zTo3K{zH!}cPFk*Qa)_B>E{wO9rTIA=VV_{=3uD5VQ`?(Fm{U8Od@v{0 z^d`a87uFd3pmKjinT(^FGn3e*yfj&GFXxRan^SWHT2$KFg8ts_ZY`>;sEoPTXo9+k zV^PW(q^FX@mXlfaK0f~qvj$I9AD$mN2NXBFl7Y81p3Fx)@Sb{&KrPx0{Y5w6t7rfU>;$ z&`P+WGyFc1e6hgZThv+c9u&Y1>I+_$R!T*uCkUz|;)qF8xw3H!ZR4!W&tsA?o>Ffwwba0PmqMYyOS?Ge(2l5yJ{ zF&BJxjiHcy5JdS_f{WBPt_(YAlsN2j5J$1h?HM##sx8C(quU#A+jLp_51-zUEtvFt zeB4?-s`UWT;XQZ6sM$WZ@XT&=4>sH)Q}#jtRHj`z@$PSK&mU8ehdU{|zYQM7-0<4; zaCpKVcY()`Aw4kh`h$cDv+ti!ypl7{nJaok-J}h8c>@lw7@m^jqPBP2RmSQUcaff0 zhR1s-y%6cDoqA)^Fwz7i*=zkD6~h;M9?S<1w%Gedr1M8m#j5hOd&3ZYI^LbFlCIQE z2Q5wAA25ID40%A9LmaL(vrlzFxs6EUZyN0h6wjd56p=)9q-8b0;L{0|s zs3AYd*lyr^-OBw~(1%;l-mxD8UDHnJ87R5r-ZIy)Q3gYN3 z1fh!HP48#Bf-kee`M{99DYhHAVvf2jz*?eizz*Q+t-4v7+!b|S8`-_(_KC3>j8kq% z-t+G2*_8-{eRlPW&X|v{(q3u|K}#YpaJHEyqNOoJ1bGw zhB^OpNmASYm$INxQpm)_QIrxYoY;|!rBfZ*60V7JHEv2G~2%G+U15Yt$GB8# zSd27VEEV`LC-QW%8Q!8n|JdmWQ5UI)GMWPGa#*fr_#bU`$@^_}@kbjvTEybufXm{7 zrZADhVPqZEpk$|ZVW}a* zqI_f&f?2Uu7>EW_%UnTIj8YHkyq2)lvFZMmEU)IBi8L>$6P@`euGWpL`mt@{9lNkz zxbz;FfyGqtD4C}QvuwLkFk-=r8vR%i|7f_gGBZ3X|%z(N!? zB()c&!}Wxq=JnOGkV$Hpe#9`t5~!%rvTT4+GoF0#Q&Zdq^2L=r@g^;JBY_WTn^L&h z!FG)k#x~Z4htc0lgyI%BNeV=k~gExl|X@ITQiTcdMa1v(!{DMHU#P!^Ix)#1XNCG z&XNYO zEWsdJ%0f^SAp?pqL2*fSD+Lb?#pJIQzbZrOHrSz$tz-uQB@S+v%A&O@gr!|_P!=?; z6KI!)$K^BgC7MVI2@0cY3r0^nX*&#TvSc?7`_~5d8GU`!3Y&9jGTd|jq&}{MrFuY ze*+D&h=7U#x+eC@=XO^@5#&4;phY1-kX|(7yV3U;ixM_t|78*@F%n8^ad$Op?w(dh zr9@%h9C}Gy*t80hD{cU3d+yVt&Zqhe6U~rRT??CuC`%lDZ8pN`sEnl&e9pP}$OeQ_ zJru_iDU(tv52O)ANiNi3ph3ZtJd-jQ!(b$sH(tKN_yu4vPl1!LO`bqt_gV%^>LR-p z%}gr<45PeMZpx$JFv`~@#Q_X2z+%{-s^VORmcMLIWguq~A~ms_GOws3*CBc4?h!qd z%KU%|9kCryfbueVdHvRAKD`)CbzUTHbrpN~B%)<8T}u)&iN6>i**`_rp`Ld}o=!aT z2!9eU5?3Zy2o+A1Xc8^}BEOPCBW`mRuv*Y)fAZ7X`byZSS^!Z@0yL=qaak*B1Uu#aOD|pr}WjjzsK2m0T>~3U|XKhP*!6 zhS4;+pYCc5!5mD=Ug)6=wyZs94%Al757HVO(gx>W19&mH?04Y~oe!uKN~d(^X$v6) z2JY%{gr%C)N(dgI@r0N>`uTPA7pS;^TY<6SMU$u{*c`YkiJbo+U`!$uREYwN164^h z@$6|jl68~|!&{+I%@7|JYa6}VN$n_-St?U&C2uO$xmY(Nf`5KKsmN+|lZksY|6ZbA zuLZ4i+D5cANSj`*hA1Enb}CDP zPem=LPud}0d_M<8_LeWnJO_l^B%iZ&=#(JL6ycAh4!hw9=Tg_nAZrJH&V<)K(YufP%=K4c^UpsEzg#<1AYG;PSaP}7t+|8^M2GZfj$0q0 zOwfxK1rGvqCM8G$uwtN|de#EE)%^#gew|?o+S?7LLOx=d5_#_Pwx{dnt*6M|)E8JO`FYMbSd@Es zdZuN{hk`79wIkEFI^Y4@9MKgVMHYq}No7$5@}~PCuz>+~OFR zqeo}d$Ck`LxjN@Cfm4y}Sz1_AJrtO^>E6x`fsG?NVqQ)^NjKstE6migW_h1wuKF8J4@H3e?=3r+?xl zQtQ4=o2S@9Q8f?-y_nEU{6tZP<29}hOBNc{xoeWa_}~V!#(`tiu0zA>7|v6YqFG8@ z{NV5LgJE`|o(DJ*ItNXOy|t1+p{F+W$&z9y9g>H1y*I_OGzwx2mRBC`y}eKxg>#xT zcF4hP6sjJDi3sUzCzotfWl&CD<{NMyGxL>FxoDG7pt_WYxHFy}1<+;}7B>TF-&HwG zNDL^iv?Rq)6Jpp>-EBKWL-4?=?(|s<#aes59}ZPH^s@;@2oL& z^{l`WDq17ujFGaYCOZ7K14U_Ee51!OuPhA!|Eu)UMUW-@c38G@!=lA-h2$E>aiT5 zd547Fp<)dMutBiz+PC|Z@ZoD2wlrIAL`D9&ZKX~F)?|pnUllc3b@rR~As3}(0lkO+U zao95xg)5kK>GOaSinzqx;IukGcGNDOa>lX)g zS}X9uwsNSpia^~cg>hGR;449zGNPT0Hu0pGdGMPY?c4FB5mdpcAUR9J~dgv5cl|qeW9J>`u4F!0F%7J2g>=YR<>S@SdQ`(9p zQ_x+OCz_}fahDM)FMS|cVM}tKkk#KVRHxTnrKd!Xg@a2RDs0a;bZEc$3RO6vyi1bj zXFECkW0Xd;^Q*4h+o8R5fVmtY^N{w~N=)n(AQxU*g-;8Q!;Sxhs$PJ)?mg4E+1%n- zO}VsE1WtT8s~<<*Cxi1dlp(yDA)D8S?)?QTq)Y}@fg7VJ02ZAwBytcIBew21=fI3- z^2sB{=td-_SB>*)XAjaVv2Z`v4y=JMZilnZJ8B486$I_ z140Pt-UUa_QNpCgHv~m`cADt}S?{M%hFwM*zQZ}HEKKcT!f|N9(x_}s>_00Z>TH7# znF3s8b*3|Ow#j~_Hr0^!-JYe}uY~jV%{5%wm|S2CZO#m-n+IM0;%Yj%CEfl$VB41D z%!gUv*}a7NJ4b<`i;=ub6S>bPBFzyHvA3S6eGIH>lGNyXV|yi;DxIC zBGZb?&sBU*|4NMDmTBLuAQ;_4eZ#=PA>=*DuU^TIOuSvy!P`l~o^AgQEW8$CJVdRj zlk9?ae6`a?6xIyZYYF%p4vd`5d*SPJlTEr#YgexNBMX=EIzrE)SZ{kuJfm3;oQw4x z?sb^W^<0*xTu4v(C~Hq@tw-IbgtGLUv;SGR^D0b0U;997n6S>5sS+ETFHB13#)&#KHG$xF-5P56jlp4I!>!ZcWOIKvHs%_ zST2e+AIw^XYmq^-%3#h^qJyNZ+{Wx-aFLWSh=OIsmu9`T_Nt;Q)@rXGlmA4)S}5=6 zUfwUU=(A&cW2z0!I9JCwy}`M_;?LCoVgq_ zd4dUJ<|$+gBo%cRCi9p4{|iqAsSkgw_s>;wxs?it1SU5tN(;aI{p_;lH@_qVWkyFpbib%Q zBn7IP=QTC)xZj9rJXr}+k?o0CT6&svc=mj~G4lI*fBn)2NC~(xBKZYKv`4-nA`tmg z;+GtA9R>n|@KJoUQ!dabYb5PuA~b&aj!>ZmH>Vh3NLb&SYFBP_2DFFw1|Us3dTCpO);WIHsY`}1))o%RH&&{o!xzlGH;@~3JdU8RUQiDhT*mz z_5p+4--_V)C(2O=Y(jdb8B_^rE^qk3J|cZdIvlz%PtPSh&%>2E9B|A^Io=t@e{xk1h~OheT?Y=Mk9fG~nlmn8LEnGZan$NL4$dB~OG;x^V!X5ROQTy)m9>=*+$XwG0LI!8EfR=*Var8;OG8e0hDI>sl}Ou|gC zW6@*Z6^sO(QIc!mWL6^mT%}jA>m+Sp3Bq1wbHW4H$*L@B^ZrKEz!6PLvcv|F-rnwp z7y(YzVGvlQ&{gE}ypq_NH^fOM+mtxUVz9lKZo#GTtyv63DiYX#5`f`PAQ&h9<+CFG zTMo+qFWC71@+>GwNr5sV<}@{Hty)-mXYqK{;Y9^N2p~06L0*7TcgwksT5qtFuUGBO z-jTT7K)e(VtuIs(urSod+UllX=g!jq;0T&VoT$V4P3_nGV+CAUE=l1_`L}!NHj4cD zS`Ziu5%7!-|9PC(K#zGL!YZmGR2J_?xxi8(=*`;b^Y_l?TjpxMOCFz9b9D9MPpJN?;g{n(h4-onrhy- zM>wgmDpZ8pJNSQ8ECkUa`hRq{{wqHEzbh7k<}%J!PUhAIcK^A> zuU0#EL;+%acek@`{~N5D%EoleGVsiij>W@Tf}vTgmzRjj_BM?(Z5r33J2NG_V|xc~ zbN&92j+tX}UkEq~ISxPlG5KHQIAUfyH5^zdnTBVMcysQbajp{|Hhpcp;PxQ-;^(6s znLO-d2a;gQ70=8-ZIp6Q|+Nr!LQ(; zv`5$sn5hXz3AFx1SgikHp=Wd|NqvQmO~sXoMIr2;OPRm>b>{J<{0~x~fSVuhfF>w0J(q=QF8Y3o34&rGi}sgQD4P-;UD+~*{!I8>GE<{w z)=>(@H5S7zg(WjC)^ZWJJ+Hkxp)n|54VAswBH5*6zBn=J9&Vbt+7W@@t;9UbznD#~tPkrcL_rs%&kck0#bKp_0&UqgSjM-kMZNX8A}qxa`x zzq?%z2C`m|WKa_6eFbz-B`gjZL)O@JOGADd>r~wrgw01#=VLW26|@V2Y}0nNw^%Qm zUxHQOV6N{}q`+!1!OsH9wrotcQlLey-zO?(l73@ZA6L%oSdGt1PXN|8uc%u0NV|1m zlv1jfqkgorZuG*JfJM-_X^JyMRhyDyV>hiPZ??$m7 zE-T)HZB36*5Fix+!63sp>ktV4; z#r03&9jx+BKc>x*)AHYH@fCEAL-mY!IjbUyo)osxsy44W8((JEfC~>%N9Bwbd}bW4 zGB>k2esy@y@=uSm(I^BRLnps|`{yUHZP%6U+#q3U8Qg+P!U^CTaL8;IvlCwLlI#P$ zhWG|NpxNjQtN!!o$5|fkB^$^kJlDGGnixxQLChzI_DfqH#Ij;r%vV3C+-hXPX>kO^M()o3x zCF1?CkC+c_FBN!u(UxZ|@2OalSFuPdqIwNqlmuM`^@?@5i%9B|ly7}u;B|v31flzR zc>`6%EYwSh@5j< zz$baZi1S>~Bit#Mv>BN(@Byt=t4fW8>~7@SA?`_)pyGv#*CPbi)k9_5wh>NlR&0wi zdrC4d!fG7f%Id^e_57@+(>X44MdqnX)sh=MX1L?V>yt(yNalsISytMr=M1z+xn9wL zH_Eyp2AMdel=F>nL6V5uf$VI7U%BdF0jo5JJZQpJgwvk`#ke8hi)H@n1L(Ff0z3Oj zzxM;&A>nIYJa~hF5LRTs4FUhad%I3cul`%`$p5Dz z%>Tm?{a;m>|4K~%haGzPJ9nJK*5q!CiH1qkK8Zj`9YhihSs0lB5$Y!t7|NeJruzh* zv?+zS6S72u zh7Z2i`1ik^*E^20{}j>RoToePUyY+VU<|8F^Zv9ieK9;<6#K*wU%|eSssB>TqcL(f zdJxbzrg&8#p93V;- zP$6*TltiWv^UReEP7OQs^+U`uDd%ahRk+O9rjdrB3T}nNPoNF;?DXlfNi<~vpeGV6 zy8cZ4u zkH5lIH_}^08T+Xes$AyIn@0Q>%gW-fz>pL8aLtRozE0s51*Ypqt8$RbF- z1ib4jO|CjzggemSN_)ALswgD63;=thWFM3@Zglb!=*)CzeTcqsqnSm81N`j@y|#g`?dDH8Uq1MGbW<+%z~aU_?@=f9C4#VutefBjgjg?mz`wGfrO{L9vwc zI8~Gy6gG&=b2kKi_$*T^7kX$aGP@qxx4`!ccE_$V65eCn5&~~Gh3tPS8{^dXnLSeb z$4KtT)6V5zPozxo057vgPREw|@#I@qhJ#Ebofr+Y6IamgD(#1vdk{Au(AMLe*9kOo z%<)W4y9vh)Sjh2vFc8=oL~`Ls5zZG-?oyNDR?3{}qek6J;Iv5%>P;~&aDMzokI9-C zd$6jq322r~5_?}M%QUhGl2NEYtF}n18&S$N@kz&Eqv5fFy%vK7rIfBXCX>l=ifYY` z_rMqO%+sL`k9>jDOE=kV&hosw%nxybehX5ZWiT)dumB#JfPcSl zsNXXYnq}{K$rU%Pu*mij?TdC?4%o#2dZl;& QGI?Lxc((0tAa}IKR-5jW4$nb?lTM ziv@2bMQCdBbml(}7BRdxi7f*!Ky)OU%^7OM!aa|8b~WC-`W^% zc#P5R6Nl3sKj;=rJ_vtOBYP(|+J)1lo(K_#v02CpW*STr?K#nm)Ws^8yVDUmWC%L95&>9Od&hO*)!_U z8gb8%E=A9TCkU^OInnBnAM#|$sWaek4mlcyyG%T=b|}=jCq}{81M!+ys2ic^aUpR#d@5Y_Wc1RU;0^i84Qp^#y2ft{C^^Gt4 zl99Km7hBIZC6G$%sY*QbpmvhaeKw}?l?oAKvO=;4CLVrxi&Gs{;}Dho_7U$Bt4BU$?)R9j4esM13jYNARh|>ALDMg zog5=^=l1oPa&w6|)?*K-xN+y6Zqg%_ZZe|yF2Kcl;fS;<6O#tBH;kC>!)}h0_;Yg) z(UR-?fV$Ktq>-n|JTe^BmPqT=bBKqkxEBN<50!=Op3FdnLX0QrTfFq_{5@0mZ+giG zqjVoZ{^WClPwA0B8t#)~NzD0}p_Xwg4x zD{>nl-CJnNWT7v6L%Mi<+a~RcnAJt)<|$LMdLA3_fQ{oY@j&(&PFRiKb@A!bEOfgX z#BCT5U%c5>k&ft@f>|H#DLGUvvgNP8RNZ#ydAS0L-fAjoyg~CT-p8YIgRMe$XQTCO z)^MR${DCdsYIl@O~Uz(xXJ7Kcxg!3hx6L*dC9q5rhTqApg zSmLMdS*L#q<&Hh*y(y1Wx9Jpok3V4U#GfOg1HuB%L%|YYTDti1LiKH2?EJ$D za#u|P~bkFK4}cYiKwX;>@y~Ki4M^;8dgET(Bs+|BoYZKd$z=kD3sBI zpR})&D^;4U8G~tqr}FJGhFbzLfcktLn%GIF<58y5X{BVknMa=S_0oANRDb+s_{i-8 z0-W3~+K^D`@w_QAUSjMxHMspT;GTN}GW4rPdaT5LJuhGmT|vWCwc-$i%MPk4`fdG$ zM@|(aFwzg4WiOFZY}@0mP~daNQ<033j4J}gxAu0RKZ9IrHY#8m7h-`vwb(@`ZR&hI z2PXzn)UNmPcTRB}8Z{P60+FY1G#18gEym}wZ(y$6k;4^xxcRE-JMM&_+{Ks)hq+sN zTADl9J#?T>+ASOBDoKDwE!LOWP7l1}WELf~_0IZ6Q;=mw+#T=VhM)phs(4Y{)pevM zsP&^4FhQu1xY~oOuDvK9GY(nXp%^JEm?KAr6(s*4oQ$Nos=)z)#YsSulgC ztRj&VhoNx{qv$&L^ZN)-E4l8qh}-nK#PW6FB#V!o;w9!A;o2fKdKA6)Phfo57onHgGUe4(@DA8AFPm4CA+atOX&g@V{nN63<7XxvYN!7V-Xgms{59 zmDYJ#jR+3!pka&k|CEIX(N$?80cWXv$dcZt*+jCkje7kYiFM-%eE%nq61;_d0@n#u z(7{7pIl=j1F@5li0lFNOp~UqZHRkHu!P)yfvm5+To+ zrdT>OZgTn&hYaXHEWp9N(oa$^=wymBo9UiXX7HiSBhM)EMGgyFA<>tNM?zCFh!=rw)rC> zO=H{|Np076GDGB74pzwBW3j2s)w~u8cHJ|FWPa*24rd0E$)11Q0%|R_=i4m2i8rNX zgaRqBwZM8k07`xRjaWD5&#ahzhH*lnf117mGsJy;u|xYjQ1U&%Y{(BOO`futQw#r2 zNhBLnCeRK8N~3!Bb=H|ym}E!vZd@kT3jk}#TScmDXQ}cBOQkwUNL-`P!8)I|2|$p^ zjTct@{bA$vbg-yQC{S>sW6{~m9&%t_{QW-(2_x{Se({%&PSwk&Oh(Ndn}M?E54J@m zZm`988ZkSr+(ZhFjM*K8Q6dDbA9UFV2@#gE_SHrF^nJkuUf~x2ZLstU^utMQ-2vLn z_*o;raWvk%hz9RETXQM8p2Egz7Sy@egk+nMkBrm z0O$AZ;9CRTa;o8RLku^q5L8NG)PsWgn4^P?#M!|k#6ni>Qs8F9m4#m z>U?B^Zqn1NVqPmdnL-O(o|RO-7jf%$kWPuXX-3k0)=Vf05px(DDbh5vh;SD_d#1EX zhR{7VUNEos4W>lk{dE7xN2}dtb=x+{9Y-SIU5V9*e*`)`MrzEdi*gYv+MA=G7y`xA zWpLP0qr=`fxfuaSOJ|7?^CxvUo`>CzOlos-;UOP~s-zINaX#OXc{Po)epBUz>+c+A z)d0I4xuX**S$)-CLyt!H)9Vp-cZAw`=P|>ljqJ1LP)|(ij!^ThNLy^`hLk&TU9fGY z`yVj?FImH#*z$>3HR!j!lZkqjgvpKQ!wyDw{t3?U#&)ZB#$Y>`YSiY#@KnC$iN6i5 zgNu>oD)0)2pSij!XH;8}n4Wu8cAVP5H6W==f$7h99-2;RDx{sprgd zwXYfX1(Bh3e|sqbR7%d(PNO9Q)Z>6wSs z)Teh0AK&8o50$h9f^dyTla+%i&&;%C6Yb$}V=c|$YYN@hBue*wY5HfH@wzBb+mv9~ zez|{iVYDt5Pi4z*fWoTV=0iU3b8B;tslF0aRwSPCf+FlAB{8wj8q)uJL40@I>d-}| zHNM|cJX4#zF+JIPLaE+&@mi_DH!Uc$G5PClruFi%31T`cN0Z;64#HR3Yzeoy{Mbby z8)&X{LP2USy@jRr{kiRTeF#A_X}HnP^AR^~Np$~3T!Xf!z7cZj7F2{ihxLmv@cA^| zHSiD}8K*aG?`55J}b>GqlG<-UAUUOTak_ZYDik139C5N%b9&q7G5p+*n3)+g+?RP|!W zPxc@e;Au&r{nmJvd&oP5z$)kIDp%SnDJ)Bcv`31O3`fkIBX8a~uqJMl-<>G6jXUwW zC?2NsmV$D34;gcb#(CT2*UlfCHeX~Rqg>D{mmn(^*caJTA2Rx~TT_FmEA#7HE*b%&oZ-vU z2Hj{jM|ra0R%E`uROJTz&!&sBGy8Ie0*WG-QXWPfojjD|I+DMRkwYQ%r}rzT=L)L~ z>DjLO-F#l2^TP0TJP9k%me*EC${_jqL{zqJe|AX%Ne{Tu3pxjVav%f#B*NG z>pHEUdt(1?|Fvnoa+!7Mv|9W2WagrUS|`)%MVRh#zu)=h+fB3eb^7c5L+Y#w=G{)W zzqa!R`(>I5b$|2V4i|jaIUn_O__%fAcJn3MLibzj_{HespNG?&71EbdbXVzSl}`D< zcEaw5@5R9G{&n_CsDl?izuf`;@I8NcsBeu)9lyiv@u=)a5!UcaJPLnx2+rYdN6y!UlJn6%F^(`lBiV9`MPr&ViA#9$|pqV z$*GBwN<+nh`I6`WrQ|kgG_A_Xmpdr3ppx+R^JA943ABvzIdUB{vQ`*cr(g^jV9U8= z{SDQvTXSShzJ}}_1G`hTV55$@nB$OTZJV~5tmC;yefx;Wec6hHvuuT{VxZuC_R?7a zc+*^Pb(47hu&m~RAUmz${sJ5{t+PSuo<2G)$`FlO*?4ew6`F-=nMghwSTir`0-CP5xg`VPH>~EmlZ#bs1oQ6DCQ&_xywEAL z!V`SRAS_TqrP!b*{ib?WoVAi&z+$0E>MZ2NbkITGyjWQZK|%ixDFilmR1Y8TK&_+} zNWNct!kl~}cpxK#eh`+CiC_O+3R_@24r}J=6#>TvY_DwDC1lXU%-Zi*yz>>0fDYlq z#Q^Rm@!vd~iSUj5eN)wRS&`M6L$GN-iI?&%eRvmuqAW_++#@8N0Z@{V&B01C6bM)& z`ReKs!F#jQ_N_?pFUY7YvzbXZ2S?VQ zpjlQMZ_SGM$8si|2!~O6&=d^&_{7XH#Oa4MNarMW`Q=zJ$0K{5bSOjYWTo^}lrSa-SIKSnv=klw#@ zAZLmOM|z1ktM;RwAR1u z-df*(;>qv6{PmGw^|iqAV9!Li#5f%RAKu(z^aefi1BLO`Ew7AWQU6w$BQOS?--e4W z6qcF>(`K>I;0X^N&LVVbiw6nDLDGYU8AX>XtMy5^J?JLgKJ8HQ&p|qK=f4>b^|oYT zi0vA7Lb5nJki6N^Nk*J6M}mWiBr!rnB%-7xhIm>tQzYl{B!~i}swsrz?L0m5DsRc& zU0%wJh~EOUfs7`{FF?H@{`SWhiI{RLs3r$ZgU0BQbyN1Vz|s_TW_z)sS+OAdI2kZm zuzD+;qDeEKt#X~c|cnuen&3ZWA0sah!GZ8UmN611$ScM_?niy`50D+DzVdDHpN17vt`;Tet2?`OB zrSPoK8qvUXqJc-(3%~)gX}9=EeFr=!x*a^Jb`n#nYp%U9czV&IGSYHrD7>DHS0fcy zZT096lOa-W4;{h8Wu-&Y$~|~AmB%gZK*jjeIdrv>Ij^<+erQbrM3xCa?)Lyy=|VJ) zwaSJtZkDDhb_k`QSla3n_Lmuu(z>Q#W&+u&qJWmlx;PVUqeKzixw0vntHKO|eqBSP zQ+Y$iQ@JDfiOPxEU|ksdcM9T_k~u%_o?C5#C~wf?Z8M%{Yw2p3oAJ}*mQMhAy8+y} zk7WsA8U9Kjo=zG`Z}#;%CgiW-3`nWz(u7=fiOSYBKu zTpxlXPQ=nZKk^(Fl|RLN$!`*-P+%2jd2us@Xb1;{s&*hg1WxKOzpOT_Dxm#l7y@w` zk@XD;Kh4tMGD8pj841FmRpR>(?a;PM6oU$=(oqk?2UVPe%dRL4q*S5EC97B{$xZIX zGv+dKA6Vwr$H}LroW6%NWImsy^S;v5_b|im4YEZfw5f0l5C7>YC36c<1nphz4DuJU zozM;T+o zsd7s2f^!tkH9TT0Z>v^PEQ|;T6)n3<$xS?_e722LzH@#jU7gF1aUe^wvhOeJ9WXsO zte6J`pQ;EWDH#w{%}MM_WmEkvK+%q_cmOg%uGS_(a9u{^=x#qelEX1yM+X<9N6Mi4sS{u=0~blj zaWZ7DUe_opw+||Z$RK519KTK`7MW+)rMIClZq#XW1wiyq!a&24?pKuZ7WQG{lRzZLS)lf}D z|7{b~F8B;lU_wB`W9Gru;~IADQw!{pF29jt%?;xS`WyZTr=ekbA3pM{h?fG#VUvk>5ZOBVR(^C}1RGvs&K>6*?sRhIm3*8vLer zdd5YlBzGl(Zo-_`WkN0AOGsyn{3Kms-J9eIWc}a;xz`Hn7~tF`=DU`x{HM8T)FSTS z-#fe{G*q@FFoWKvpS3t2FLo!wSp0ZuGuw%`w{kv5piQ+~Q?#GMxSPB_Yd2Qr<5hc>zgUbgk4hRB=j z@m|?;tQH^5Dw=i2#l7U@@IVqK%yvm>6la3DeM^4mfwmh&(37h4*2uF41!jU0WVP8{ zQ0PNyGugcWT#JxghAy3Rj4YKDZTudnAd0^vv)*t7|C7=;Zom5>)kq+9AlbNd>Ac5& z*#Gv4he+Ja$Cq$fOjM+Ljxt$xv6HIDA3?b*R!`y9*`7000nL=L;D8qv$%MT8)MuWf zh}~tZQAej7k;$>^8NSP>@)SyJdK})z3k*ORnD~tzTW$* zIZA{(oV*4%Y(;e?9hTs&r(M=bIT6^4WWHTa^*zqM(QB70T9GWLaG8tVfvHA%y7)b~(? zx55TF21q#4w+lH&jB!piR1#=+wr2|EBwS=~uHm=LktAE0EJ=BM?_f(-5b`~~ERk`p z{kEug+?9N!URt}KbT}&b71a0x%;8}N=yOX~Z@(~!)6Rce>jZ8pxWeaxh3w-AXKLFG zuYs#=z?e*es{v`sPSMmR(MpTcf_c~kKP1e!|I}kn)(00iz*)`(KYCsNW`EKrw>hqi z(Ms#(t=j9JdiObLgUAJXdiY%Y)frZ~yp5x2{Y-IDwrC?!25w`czwU%?mdsnIg* z@PHX|5Z90$@8;@xu&G|VkWh;?&*&uhg2v+lR@%5_(3>fm zzdPS(Mzhtv)4(rnnqxHenQaF2S*<(bPWz(ux;D`*q%k4P){I;U za+2mD+g6IgYh|_ASde%NGnYE>F~1*{qB`9ya0}4$MUvAfpzw&)Q@#5LenXI7<&5wk z>&hQT!cSs>HTXir3a!g4U((?U2o5r}(~SZk@%0^$4Ohb&NF*w4*>FS_%K-m2Ft^wYnj@nB0^%6t(i+g-(8kkldd4H9UDnP5Yd z&Nj|ql@T{Ik`VMhXE{XsYRere&!|6poNo>&>)jp~BF@of4LUl9s%2|ABH5%40=tyY z%%c4oS}+39ukpItoKP=ZI&uFd7*z2m%S*)G*s&!cvn4|V?xj;!98y-Oc*bMiP&!RiiJx`CUzJvetwtUoztjbgvR?+iWPu=$MH`b4?jD0NY* zc+f+Pjn+v~DFPw072}oMVpAD;2HUPpu6QPGCorEg7jUzr`=u6wC(}w?G2c_yX*C?7 z2HOa>Gmg%{y@FY_19JC8c2uSieGNO`q`mO|oqPIRwmUxi>?maMXxNZ8$~BNvU_N>%gkFBd@lB z&Cd9FK*+1tA4%&!veWZ!;mpVs4O^AZkc6NmF(D0v3 zclpeKrYD*fxI*giH7buMrZaCG@8=SRjX3=#!v3>&s3r)jrX2;RSdmU%w9Oc4tL>~p z*ScocQvG|fI(L+{wxX7L>n6)q%&Ey4g-b)LPR#inq%FlH3y2g9wUWMULQCwicv4aF zo^acByVEh&AE6`Nu=gvj@uRGGRGuuG*spmv5ej!VJt_cphUzInM|9trwk;27jZOYsSvr zSpGiziTT|9*<19dEreV8r!zg2Lf=NQZ~yP3ABoO8Y9DBJt};sLS;)kFla z>-Gbo0^isc-;)84glbC;+YDD%v=i%R8VuR+xfuSdpNU_d&m;eTk@k+!xklTT?#ha7 z+qP}nPF8F?S+Q-~wr$(CZL6~PId!Vlsaw0XUH9krceeNIbIdXN=+967FsK0b9jjnf z+pZ}R$XP7Z{tUF|Vhlq9eE&e#XpHyno6gQ4EjmN_qIQra^#x>***IhXH_l_g#Z8uM z5;~=0Yxj6z@($y^66euXjH#j&I0Mr9u3B5(F7el3TZq=_qmW|IXDy{+!>E53?ZF#9 z?~#xJ(9iv)V_QSL$G@VQL(!tz=UI_p3totzB2T>wfWx2^N0~P54>$?4Zs0O=6R<6- ztJtSue<4q>ByUtAkK8a%VQPlV-7m5DxeWa)M$}O@+f7xNM<~D3Uyn#!aT2ZO;T-n|6l%Y4}%%MF#b1qVT z-p~d;T$jO}KPdMZj3+_%j>Aoijg*!#7S(CQ>EYbG&orrl&|KQgVLa?;8RRy zb;P8z7;#iuY;Qj6!jUdB{fhpHzWCq6c zhim<+@(~akJ(~O)VY%cMeW3#307OcgBS7Z@a1WG-WlFCPW*?X^(+{C}`E-xS4si-=Aw{H#I6D;X<*j9Z7y0-s2=*;m$GBOT+~ z0jCY6yJ~Q4zzCJ$)G^Rw+?nm;;WR`lMR4~G`LuP(B=yKE-75;y1fJM;1~8#l>-qig z`)a4kkKRoPR;{I6GjI0xsf-6U?KBWVEn)piTrIAKN>8}Y^8}(y3H7su#$5w7lV+-) zXi2^PFt`nugbP9)?%Z2UJs%6g811eEsfO)HX;7b)*ux~-Bh>Hi8?5lpkt*w{cq#zhVvzDG?mpr$3>xkaV_n z0t>v8@@zv>#7`J*G+@es^$fvw;v@9&>n#EELg;Lx<#6R%I*Ju0?W%L9rACm!@@AS< zg7&;U>)Dfe=bR}S8n;!_a0Io)va3RQ0X)`oLMI!)_x!IVXt^k!h2iyW z0byR6KWLt4y+lQ!CMChip{jp!q_lcLFa}_B`UtJ_B2!vWkI64B)BZ~F_~2lmnn~?m zFd`?{d|}pj{bom#fsOo=z~)cir;g!fuZ|}||BU?)wZ8^XM#%s9bEN&t6z+d366wFK zQHVHM8k<>KS{Ye8DjL|>{#PuwrYxd7+?P!ICbbi}98haWUfz=*6&{4z0ggVj7(tMb zCr1Jx6;-=aJMkCjcL1%qR2h7}ACXSh-y2r+{ftY$kQB6s-HduhlcV%k>UNYS9*)Ifpu_@treZ3VRMxbZ z^^oNR*G7uZAq|ABAI^skyEuZ68N>G$j2%0Q1?CJws;+j03dyz%iSxFBdPJ$5424-0 z6^BV%aOn;b);dzDb@-3n7>?pu9A)sy>&n=}ITk0&^gjI9%Q1^|1Gf9# zk3l56fApBOmgytlq4PP0=%(myo@XJBtjtLxt$lc04>(>k^Yd7-I9L}zO+s@6vwCnr zDch*HyfaEi+V79=9}*2`yax`@&b<8OscNa5)G6C%QkaiOx~703h^(GXZ}^ zkE9XgQ)aq_g(yt@<>&f@iG`{p4G9=eot85pawV-Co=Gr~>od9odzVL$1G9z1SQkO` zh-PWp7qzU;xjNhmG;WZaU}>`=)&?UL*NhB7G1-=@&b3lPU=N(<*B1n$ikBh7&Dn%j zJrO=`l2_*8yPf9=3zg{60QV%}OM@aSJ6)o#nFQRLel9G(DlFf#^eNfH;`kWKeCDRz zX~88GVojEll{QO;X`KD%1dE(bO%VL&cH;Y&$>0+I*7D|mvfTe0F2?bPO#GkQOe*pY zh{{M`GI7T7j)3^SVL5(i#Nv(XeqkwU)YORy4MwKLjAxL|>+4T*mn2u#IiIK{j65Zb zXPi8Af`PZaxI5AITrTa>a|Dc1X%`1qKc4p2E{`sU>&?&O?d~s-8+;VTk)3!Z)@7&r zQtL8wsQjc}laz(c>Bo80wp0c>t3N@u3a#f+Yb#J!V>at^uwccQ&x3$^jev)0;gx*M z+Pg~Nr^JoBVL6xLfUMyCvEK@kYe4l^ZFA|)0oRh*w%6Wx=8;9sdZ9@*tc8ulOU(gB zoDyxmHldAHhZ$+O3FE>@xSc zTJ4m8HZD4_6Yz1pMR(!*0q37_jEZ$dTF6oe=7nAIW0U~{jt2c3u7PgFs}bXe&mU01%p&OC4sbB${=!Tap^)KUtK z*Xs`}=F&@SSM;Q^gGh9S*%5&=SnNOuNp$+vt={K)s1cneQt4uu?J$KAp(ila@Ft)H zbOmU*qOfRn#C%o4eeYy&ai`jvw|Rkn=kym3-qi%a-Thp!Q)`$t0jY){0^eoa(3aC z<-xMI0Xn5B@*Gpb)h~C*9_K+vamzhGamqcAePfGdW1DV*F+*5z%6V|&k&%mgL$WRn zVgS}LI1jMJW7rDx=>a+zVjFbrPNnPyu`gSI<1!P!Cd2!LSER!yB^(mqa;p>Y0zEwZ zn#G;+8YmdglM8xEiuS-L^+p_k3+^x_a`Pr`A;c}T3Nvezu%d}*C9Hu=kv|=~B&EwO zOl21x$RY7esqlb#_uv7mohzuyhn^Tx#pzti$g)Ph|K5tk)1#J9I*7vEioZnjC3-T0 zd?g=kD|j)cgvAvVDnsYwXArH6kJceoCGwN9TFEST?Q_P@5e|Kq2Ek;Bir<9~=lql%{Dx(eJ^0Q6857>Sm<_sbX<=;q|2;NKxh~>`C;QvAld+cAuE9^=z< ztSq#Y5;y7X*w~HDn9CWy+B=C4ybF~AtoFP<(^0;zva_lX4PPd@^tB&{u9^mZx`5(~ z7weE=_N?OW{8J^X>I$WfU4Ulu@}}655gh0m;@Bw&Mdn#kBd#l`{&4J?ouzs!g$6yH zP2rBBx!F3O^W=J>lv1mG{o+P!FA6AwZSCG-Kt1*EL3a~+%u7mr0~N07**o2_nnR(2 zs`e_VB`o-$IA>N$9l7Q}TJ!fg>yXZ%8jGknYos;(=29(9`6OS;j2Rsx&qY!UM^y$XOhIG?LtLt3Wa8W<@1R_9s|bK8JEfjx3}w~i(*gxuw#B3C6><;tDRP5 z4Ci-@aZK1Z+w9AZxJFYmqY=K%tH{CSp&nl+EXO~YL0Ps%`0Iatqk89oVtJPeaLK2o zNyNgSTNOz_yx4QiNuAy^%FtyQ0W0UrSGlDGs}Emfc9;!oWRQwLchFy6rJOi$y?%Ti z{_Id3zXHpaAcUspD zzD}D9>*HYj-QEaNbD~qBidrUfC}LRz){vgrXHCSiFXxZxBp95+4_wTM`I7X11>V6& z1P%&Dd{pIk4OlL- zNz77r*P+2BP}E@)cw!bA4;MxAh}3#*@``#cvBU5Yq>)asC9e?m=_*o>0wiXlb%7X| zt0)>pK%6q|<9>e~@S>>Amb@?-;VJUM-f!_u$3A0iovj@lXTG-v#;e>G*qT_~ihp!b9BYYG3j50}A(~Xr6nRLYeNH_8*#YxcbW5@S_<% zkpD_E{-2hj#q_KVEq}msKX{%0T`B$(JLkN&Qo>|+mf*6cz-OnsfC6DIXXKPvS zug7)VUt6Ngpn%B^Eq)3p=n0EAu?VP(7v><65-n9hM$8){vvme}ao!Pj7Pe!GrSKUB(v|6&h7Eh$=TglAX6l`)V{=^c_s* z%dFk5SpROKtj(OTQEyp4OPlByA)kU4$cs^tyNubFQDLJ~F=VhJ7CfUgjt620y02P+ zAy+vLWXf1*yDAHZ;_KR-Z&caIQnWUwz%&uXj?*+Aa__oa__%J{W9?F}Z#)BAZI-lb z6%DR;bP-pOY@6DbTTAW&bq!)tpQ_D)2OQh3Hzy@XWm(%7>p@-{9wg|eZAWfdJ)lts76gUA;AxfEMm12HqafEFx(ucjJFU#mlyA=28`f z6k=E~eW~emGE`_{);5_2t)hcYt3em_QTETg9aBNq@e~Qw;E2_P_k+yz& zrY~G(?MejTs)CM|GE9oT!DI`WjlmXx3O!M#hl~v9z!ukQ6?Fd1O$O*{gJG6nRCwU8Wf82=j8l zv7kf7zbb1`~ir^wTOpt!XWUS@<1sLJUXcWmb;b+d@RyE3p#6Ph_uiFj*!g0 zRCGu#;~XhMUp6r;%GBdd_Y84iCr*cc4J1c3;%ACTv`nOIp=*Vn;Bv5CmV_T#iUzsR zA5^dl?zeK7UYc_{pH+YrJOz~S21(m(_>Je0UC=U%=Hn}UrAgSE+%KIx3jYQ)Gu{08 zgip+WXb6byit5ylhK&A84H5je>kernM?FJ5M?GmhYdsSq`~NI7R4p8pRFS`|Nk*ke zSn&slxPCJv0Q3nl@{tqx{!WErrWeNtSCVM#Ol6PPO4&%?@(2zfSQ6E=Y&6eCF}GUO zC<6vs>wtLjl|ZhHRn1hmdP?deUkG>&AedXDZ)c=Wk#1`mK1@->`I9hkJC|tDAfT zm%9TRT$sfD`j&K;O~t66!5PoSIHm4RBJJA^G49p=?&k(q4+!qVE`E~hN-(X%cL-|m z>pna$&YAsO#FzH9bu7y|KgOhdF?r{7|5vpwB#+S@nG&0WPo*8b}U|ZK^ zKjQ}O{Vv-x>ED+qRMH=-GoKYBl%8;0nib@F_&kJ!JJuvTgn82ds8hZon}(J{1GeA- zgrqO2*%M{S6_2Yy+5j$&A7j zpCb`T5Y{FWQboF5bPd%!K?jj+)CqkgtD#F=*&K9RF6S}@80$m{(c#GfVX-l-tuZ(I;Jr*=)#+s}cQAY@hruMmjZ&djx#^LAblG%Ci_10c{M;aHGOVR&Ls z9{;zbPb<4TLBVz6K}q$Dz(kfht58kFKIgd;B7(8S3N-~&6(U%X$v-^En!*a}(?V3% zrn>ycGX^RB5Jv-Ut-?f7l8*9F4#Dq?Yv78W%^AhqA z3N%xNjQ3m)Jq2#vDB0g*@QyKjmr8F4$l3zHCMuP(?nQn|W9NN+s zIbpE5(!!wD^0!oZ6dJ9oVUrY9`$y~%Wv0Wy$d(-hJ30}iXu|Bx@V z@1UWZsY z-k~spg=NJ3WRWf>b0CSR9O(FvUwAL-oFyE(WJ;qyC0G5ZuKOY>ocBqPw?&osJzd@$ z=lMrVWfj{)0c~Y^aX7tL1hEk}4>emjekt8KC`&O?Fk zk@xz}63@qp=zR6Ffypc6){u=3IOf(@RvET zH&qFjawwY#5o_7kUEl@X)1hS)2Y?%LC;mDP&B zw#75EphCRrI70sEC9F9N8>c`%D-#$z(9?SO@#}ye?w{Db$T3a3h9`^=idUmTgeT~M z_G7nA$_9^>Qr?Y47xk+N41~&uSQOI_xm*17Mf+(Xlm)J3)&J%yU#={*6|%ZJxH!H? znabKUDEI!fGNj|nRy(JS{MrJkuOWdWlc$VDQa;qZQu79|mJzyX%^7k>LB(*6{1A6J z5ceI#VjslwX7Ls2JS61ILYuHNX4ii!C+ipm2F{1`q_G8Q_h#v3QZRSU`w?MDL4p?A z&J^m&&C#V4>fPuESD3PPc6SsBPoq(j>*`o3n(GxGLCxIdun1I`nI^+lN+biX=V@13 zX)n*7o2b>793h{J^cCRR89h)UE~wlCOXZt)`5Sc)UY>RpbcN{ts@tYm4u8SM^Kd5{ z$Z0=Onih+%-xEvap@g!+zWfC+IYoUjmlNe@L^&VS%JvTo8L+Y9+wl=n{7(&15c&oLW^#3t8ij)dm^K7LfQb zZ%=(ia`XHLQ#@EK?av?1HURcBep=rHcup-M(F=R}%BGm220*YcJ8U4WL}O)h}wkEV2%_bCGyr^Cg1H-=DiSl1f@<}tJ_#!w94V0mI;b5eO# zpy}F&X7<#>*4D$jGdFvMzYz-_cX{@>9WA&{uD>2#Lpr?BmUrMKZsG4P1$8P7Z6HO=t|j0AW3hx2r|Zk3N%PQ z(LUIsR@wN0*i(a@^s?3yih&zSjHtQAo`^ZMil_6{)6@>8Na1sUvU>NlPXo(`Y6hea zf&5Orjj$v`x7fK<<^R4&y_~*w{K^-qq7S=bD>VImPAA^LnI25bKukTR`H<>GhId53 zHPD*p)o(_%ZyTZKHqXf9-5o(w5axE}>Sj92hS8!l41&Z*=7j7DxG7NixE$ty&j3ZkL~d}5i_ zV`&1ew`97vXy}`#P69<82!$3P#1p}3S*IX}!0;%weZb#E_b#d;Z@hJHA}sH`*X&v(?_P=zX4v5~s;EV@fL-HqG-1hcGfVvu zVMo6P`=$KIx)CMGbc>NAW*jWx$c!p!*;bNd!!y?8^C788j=n+JO65ufrTdFW`3~4E&!L3 z7_7Qc`rE=c(qA3!E*qC$iVqBi=xqTX)3056M*9DV`!D#}sum2n*f6~Dpw*4Fe+)wP- z|9z1B|Lb+FY^|^7Xkcn&_#fr*pz8ZSoAlP=?N)7t#7%fAdKxiC6tB=O6n6d6ZjZrCxcaila{WQ>Jp zI4^Q#PdYFgoTQy{P)wsZDlST^)=OKnot3CXqdewsOkkvK>at*%tf)nL<+k+Tz5cp@ zm6aVRHrXQ#Kon1QBut;1%*e%Fo=RdGPUNGTONp^y>8~{$O?zFW)mKF zWCE`b5dMnKF>Hb26-^FI%_9g|ZfnKR;4#%!#h8#yrEq)b=WbD$!9i#Z+l%eo183-i z(=JJfE5|gKKs2gr!D)u_*Duo~@mx)7s_ZZ(E%8?KTcfDfwiQBD@s@$>QqdHom0(Inhj|JDi~LXm)}A zd)iY-74FbjG-(=6Fgg=!??%Eq8s4k^JY42?VzR&MA{^Zdc}jI%Z5j22A2c6{Q(#dh z{JV>b%Pt2+uPDm0AUD5?9tSxqSW#tk$~4$1w&RM}-2@~Zo4of#fIkRaQb2x4eFXsvokoITYFC>q;1w}&c2dQSltvzG_}z( zkTS~UnoMa6!o}?J3|QLLU4F>JRkx2AJ=sopC_aQ9%Z(2_xfb~ofhXn`p9jGdmoZ}V zd)+6lu7L&Zsd}+0pxmk3`og{&H<;q;GpfwMFN*8;ysK|6tA-o@ivsf@^er7vZ!r{S z{-b-72vJsgHho4}`R5KtM=EMK2(oL_R&UFhs&U@j`)b^2V~jgn3fxAKk)PnPlP@ZH z?JP1h6|NS9=cLNaV3PE*TfK!_>REYmP8~sNEW?+d9$8zQac077dH*b}`PTO@cfSXv zq9{`Z$>G6of0fMNqoW|5qvb0^zgt~}mL*2pN;64yHfP&bxF4fvZ>RfsCAI7XtaQ7c zD6+&x4{1j|x(1VZmPfX87ct^*S|ez08Y7bFG@PE!j@aEbO2n@@3IMaF?PHI{c;>5?tl1mD{Dj(SCcDA9tJ~=+Sj5}B~$34luxGJsYgSB4Qeb+YatkHgQuUi7H z(VUqMU>D!U+;b}(2ORw=g1-=&XT(s+KY1j|$;SgQ+$-Mb0*b+;Z#Km8s|$fN1YOe% zdFnj}F3`C!>C#CHj4=!bDiS$vFgULAE)9veqMy3ONEq{0du{QM)*IOy-bt1qlX4-F zy73}($tSwyxvX8Oo?lVMsSI3U-no-%eF{^!qX7>lRT}W4^y(T4FLWy=xKQYx8+Gt1 z;b}!GIBkyxt4L-A`BmnDsGx+d^6m{QTy99(Ky38-xd_5@9~J+05@f_O%!;vRz(*@7 z3a=3Yl*;*V1=-nfiH*VwrI#+b-?)}Qug45JW8^pB;O%8HT@~I+{`Id8>7VT}_M6ci z0*d*ro1plwD61jip#uYO9KRijY#>Ngtj{kec*`%i1AEm|CZ_ib0 zhSnH3q!4*5#~7*r03dZg2{272@B|?`pPtDHX$C_E#;HC6zn>tp#zyB^nxB9(8)`W* zp9XW*wdLh!o$a;e=Sz$2E?RA`3g@$P0be@LPOealA(zsN#=SMGXisYQ$nBi(o_pMNh5f4A@SMl*j51Y&$F z5X0H!D%*#>#FmR^L5|z0$NxoDq1e1D}s3oq3XpEIdfi)ZrLKm|^i3eJQKPNeXihXofjPbQ-X=cT`YYHR;*q-8Vb83!}v8LM~CaX^x@XIWR z@ksB});3NMtoPrwl_i+Nh{mw1KX1w5@o+j@bnqmaVTu3>-QrZnNNpI0Q7p9X4dNq% z>lU6-F!M)Y642I}g9&Imo8!Yl7GWkVvNZ>bU#@l4UbN=d5nQpMkOUSmmdtDJk7z>2 z=AZ9dG68bIob_>c=D6S61Xyb%_b_5f=V!EzGoYHa5NReyU7uY=XWXy76dA#7pi*H` zAmvb?BQMF}@F@JjIZ1kPF_3-M+V!UUz{)@wPlf<#MCd@+2^%SsIAN}EJF#*zJ5eY) zEab(wIa&w|Hj`kMSX$(;A~1onuM+x2K?S7*?69!QlHed67Bfy6-pLiZYS+V$uAPfy zqJ{?T>*=zcY$8Mk<OdjrVHm*}l z5}eb-$6t7tg!OXfX zRqPp_cgjK-Q4F+jZcf~B`B~bm=he;$@$D}biV1Qrv{$;L-iWE&nvbhna2ZJH`FqRn z91refB6>%3sKjYg3=fv}wc7}_sqyNM%u(BPgPp5GNI)i?#PekCE^HSz4u%p{$w-c7 zrU7Q15pWi9W*XO%7P>|+PPDBwDn!>tT2PGL+k4BnF2qof*uLJDznf1Ht`=HoaO6Nb z4NO%pEF(Q4UW{PLOZxpKyxk*liKMR_scC8Qmn>eoE`eS1$Sjt}emUU>i-e|w&ESE)Yq~1kxQX$p6J;0)!t`?-t8W^tZ zcQ9-fWX0I)vmOq}M+Oh&u3}y%Z!2B&I(mZ8@u^e7)5#QU@9)<@#!xVk$v7xx+X!eC zgfUkyaMN?*=8bXIKtG)$?VF;V{1aDUB(sE2csf6)WytQmb-TXu-r9y5xQidcTWJy(nM~KGt2D<#Y}& z-6`c{VK&ej=cwo!I+8@wag}1-@d1x)g$^AFbeqO>u4MdjuHe9WX%@1r5J%<~U0TC& z6`zyYEt{sjKsla8`wC8Ez)8?|DENs<*uk9|)ya`BD zikAz4Ax=0Q+G+!Zt4j~A!+D+Pl@jh{1e1%Ay$Bl;*VU1FwM23!Tj{`7@xC4x!3w7X zyFl`%J?h~K63p=87n&K%{-&OHMFAg7!dP$IUv?#mAR6qw`GM+i^2{{H(>ZDYl0dyF z4T|8_vSKB_wg(9EVB);dP4vl>&)cZsFmdy0NhDFHP;sr~04#YQ9OR0u1$5zL1A*u^ z(PTvXY8ukR1e)hv;ob~8uC zVdXp(4xR#@t?GSpw*n;|zHlxLifHoizjE=ziSk)9hvKg>G`LB{j;|qH)Gdc{WmCZ$ zFi2NZwoIqZSBRvWPXLRTvME=tD^{7SE1gpD(Pww`uPrp$F(!^~Dm>(D^z?DqMblyf zVomFg#aM=$zA2m{(Ee9^BNzr8_p@hLw#A%iENtcB`%uqDSKQ_*3lXBxw2FOyCE%tM zfM_Iy1d#|zW27fSh9|egv`W{|!Cpm2j2+Pv!j{DAJ{u%(BIAEE5-So7&fNayAKZ71 zOI69rC(ou$oTgCpl8Hx6X{lewa&(J571D_-PBi(eQ$sX9DNy6kh8X>)*Ho~rgQ{9? zSXJ^iil%z>ysZP@2ErJ&TG;W`@2@<+XWHS7R00ggTWCT?Y`tHkA~le!N@~}pJaWYR zn~HioE##8S(*e;6^CxrnpXZ5%J--bJAJEBSN#*VE~}fZIyZBh577-H6=RP< zLNYLoI}r{CzsoMdipAuc@u+x$24r znQ_XI$DI(1gww9pH0B7N%y2S$X5W#5105MU0(iy&u#!nMfc%94C$szD{3JUsJuXX^ z!cm5iupx>+8Vr#-{K7^QU(VHOBh?(q8Oc0XiTgD!Z40ufZ|b!&J1=RwLCo2Bz^U|A z*d(eZ1ct5gF6Hw(6JhZBoYp2*-8AJoay2n(+J`9(40tg_%B-#$=%KKilP0o=RMlAF zA|MTF5{5p^fHUoj(=s##g%$KV;z(#bPE!aO8MDuX=#};4bS=QktFjU6SO2oM1#1B5lG=6Jgfk5qwq&Z z`kBxXaruMJWq3wLkhb?hYTOPU&pqTNbJlEMh}Af%v7QAnZbcRTb~`c3c7aN6+{C0o^^| zcEjE3gGm|$JIR!^0Vc2n`({jfU4bF!b)WJ_2L#uw!3#*N?J4>fXK{T9n$vaj1UH{* zgI89ab6;VZVufb6y+V8FAHAY9p2oaPVSWYL%8x`s=YmsJ#rSH34QhTxZIBx+?lzb8 z;c=0pB_CQi8;AgRscv^nE<=@Q!66RSN%6&@T5AuZ{fNyd>g*HEZ2GPKXa}O@11s&V z*y?k({3>Rey|^gay@n{-eA!{u+bELlkr(~Hd3-SKE#LuB0UlB|@lIB&mP3&;g6uG` z3WJ@3vT1+Ac}%{kly5p0)a<}kp7EbRQ0`Y4MLX57TW7pL=~MaB4_7S8MWR^HdjDA9 zRlz);lfssgB)e&hLqG+ct=!juy`KDv31)Dz8c|7YV-LXVafX4pZw2Kq??%lv^hT>+ ziQ2Jl%D;FeIz6~;FKWY8&~^Y|KaSPxeBin(vlzd7m$Svuc>D#iKAl(6gj;n_#?yb= z8ghG2fmGs6fbY9FV~2S32b!V=Wl=4dO|;BvPHYG4PooqTvB#o9-;r9S0h^5bb4?}b zFpR?l$_vo@)u6Z+g`LG~<p|-7MKyMxxhH@LvujcH)eRmk`T1bV@uS+^3B~C9*Og%4PcrZ0h(lod@i~Yq zl7zfezQ!Guiw46~lY8+rJwl#8ZewrKEj)JqH44TCECkj zWx$f00M%x>l8*2e5nFIbU&xjxf(`bJ_L3)rDnQ2hM|L!yU<~S`56lFZ0#@pPp=p-A?sSmO32S-BUfB zMg3CN6M0;t?cp16O-gpYs=y0gJu~HZ8uO*&#N$UjGhB1pKdWyacOUgPT@g-zYBIno z6|`tQ5-iqQ)ykAcWB22bV~t)F7(HiCkS(Pd`xa};(`#N8oS9mOGg`Vjw%|^DxGZYr zkTg3-^Wu;+`NKXu>C|pQjJ;t_drs1A5=V|>L_q`s5bh&_{rTcQFle?FI9_A7&JVP9=8lS8WYBxn*JlhJ7rJc$zt;=zFDh$%l4cr@{0G1HP!oe5YT2?o*XCkNFUY{hwf zzE6>J?jWbA89=Rm^NYVL+x*ftlCm<&6yoBI$Cb|%68-Bte8Z8C5lAxE%PnZ=(`S^^ zrwd|RS&6F?)O0|~oj^?RiAE>}@K*%E61c)!LK_<5&tSqD>v4bHwKPM?z>n>wn~Vc} zG6tlhXGksy?{wK#gHu+B5_Ot}_4OK`6I|?u69OZ8A9ST9uR09Y24GwKTkU2C+!TtN zr3i{1FsPSKbBkR(7uWsTGTo7=pgmLmEZ!@($Xz8C5-y1Qx!l`m5L#WdG5)f9x$t_J!gd z+}*749p>HNU7j?Ngh1}3fun9Y9e-H2XY!AZNG+RXL&DG6p+CpJ>WB#cI~@_lAGf=i z!GAD|{>$w8KhZ0Zy%K=@a6;wGcKaA3I-Q3x_5M4|U=jgX1N~n7CUdJ&&KKZ}`7yfV z__#Zwp@<#s_32ebJMxc@o?HN~J<@??eayMm{h|$bdmV7r>l3T1#c1xKR#6#+oEw)f z@!;`+8n|)uSIT!R6_g7B!*HDa9!;9`+&1q2m_}qkRc~iv6szae$sSc7ta9shC?&pJ zuoH_19BCPIS(t38aMq^MeXEKx0`LCrc2Gwdgr=kN_9@THw|CMzfnv)4=hgsVRoQFz z&v_91%W=fNm3#FMnz@p_p0$IXfuos?^?&OeX@I-_!>c39Fq$rfLj)v%kwaJL3*$@2 z=PS_10uBxp03|Jex4A=nPlA4DyybWVov_r_xLBsFnY{KB)Q#d&*l38~SgFyt)V5Hl ztZA_r_TIH_&i&juI$_ALIxoxH)p5AxF~xn%d*0q}@Xh{?=kvI5=>tm&85902`QiiU zvhTllD2Q-nhlg7{Fdj_&cfj{|M#FwS0?(08L_7k|RS)TnIH>WyqW;1B-lHS_)u1Qw zL~A!3AlrEl9uAyrcH&Kr+G9+>G<(gjY?mEK*MZ)NZn9lT7^*yB+$!jXtzL z<{xIzt|%L%y>!<;-~E>)w67-Y?bsV_a9IvHav*n!jc!t!?dE;Zy{`s9%A1Ism)soJ zr6^o*oaxnDgWgY4{p@U%JuZCGTwN+I(t)qm0Ns^a$=*Fx7|TIM{hQ^$AJ#hMt_yHU z|26gt;1?N#63dl?xh*Le64Y0c=D89@o0WE`t3RA+BGskWTGIOY)#Uj@d!N?{G>@;(~rBYKX z2_~{FM1Pii&XJHs8Le?Cau-UyZexs|Tw-E;B^fPq0e&^^EjZRa`J@sy;Qg7H3+UiQ z)6Aj)eG16-?M8hLkrgoWSro{oPaaWH5Jt{od zpmy`7Tiz!JVgySC0jg83q=kb@@?9EMNIVqyGm=6d*JmNW$o>xDKW^VsNzbD-@o zAl0phkWfC%E@VgqYy@)6yP78G(%O`{!l{iq+t-`2Ym4kTyMbOugHcGrHP1e7xN~a?`=a zM$v({Ds%=`N;GK*CV&)C4IXl}ER4uAsKJvj#L%;#tx}6C_gV#{yEiDY;vX(-y#`ca zy-79#Jz=y52RN-b*1pijplvm=Jj^U~{9S7*WXX5z{ZztlMlH1Pz@^@jwLZZ#^AkOR zc1psH&iV4o(<{&B^FxO72ypV)$Qiao^OU>vi4V;mhc8UG0zDVBYDFwrv~-Ly77UiZ z;P=q1fx!cTDLt}s4MF_=3r@x$zZ!!(Br4p{J!X)@h_^y<% z`8*tUXQo4+h;lglp-&Ni%0-cE>MI3l7Atf--jI?sa!>%-(u$$OWTYW6h@hRa=o5dw z5zv6F#c8A=GH$dHwhoqFyn!_02;WMifv-qhd4NDQPf-?U#%xWnv9VUk5pAe|V@Hz0 zVPL6SoXc4WGVZqdIOWr~b>ZS%k}1Je!~tD&z3^DVJCYsXzJMOV&iv;3ZGs))C7u!# zJQgg*W~yZHOzfy&Bg5jXOjOmI{sz7x;ANZ{D>W&VG{Es;!g`@;mZ>V&fL~!Q=QUp# zwaXS&v%J;bVWJuAWnzhZk>|od!JnLd!zY*Ds37jM0C<$F#_Ke?hNko-a7iR*7$ z8M@a*uggiDHyAy{wB`{ygn81nlm!9;`-PfBgk_F2BmJui%E89xd!L=KjDXEmBCrsS zPh}ls(4Uz&B)2mUE9hlIg&Gh8i2H${2Kq^I+wpJZ7?q?%#-?FV6$r2Zs_4-ps(AAm z^(plDwO7cuXMisP23Pr{s*o-{iXZz5$C#JKsA>?xRwSiz;$RrOq@wp=GDwQ=W)tj* zcN^LHyV1w@3g&EB;yLTG_GGwJYvMGE1ZBzSC@UWUfy0MzK@|R+cqWz`G5kEs&i-~C zWp0tkmRG;p=1L<79lfC(agtX4b|9dik9U-s-7BNzOS!%)TBoZO_)BbT zO!;Kny#{~1=Xiy2`mIh-C5@#TNB}Y{)UPBnS)YlNRD8a6V8MN1cJGSG-5B|Jv5Dnl zzG6eN2!9s|wYuQ)k++LxD6bu`qru#-TDK4eKLuxalqZau8()>cNGArf`xrB^SA_9dvyV3bs7S7+Xo zXGe7>WwrzkLW8!Bt1KLBLlQHt)PM7Pq0ZGKE)d5BGXm{)U(7`>CT7@9*3-C5oe~%9xq%R@tjnF^Evn zZ{!y~2${SO(eoF;3mE{t>FjilQ?932T!m_D-@hK|9(btcp4vNf5eZTaDB>!ML z9ojKi7=3;ZWn7djmO3|P<Yt1we@HxlE=YkqLStGg~PdDEGsEpS{UM;vw2s8#3YTx z2SosuC_bvuKpksSe=j~u;7!-18ma}*bzy5h*X0Jp67EhEh8p8ywTHjje6JTf%rW0B z0i$xjAw(D8bvAufYgGRSW#=5D%fD{RZ^m@nyeBm z?{Rc742idA8sIFaH?b$zq`SHkYY#e)4?7eoTTv}5x-x6`qfi)iRS!aQH6umeY_Zl> z4@|gDh+o{a4ZtK7>P$~(Kx^yYULsg0-TVf(Nw^`2vkebmm2`!yakA*c-x~92t|Lea z=gqdg?HL2K+@4|+M+8NUeb0X0?t-_@P z#7Bg)&PnPFfkgKM0iWDfxzMZcB#hNsVki{TQ#cfGZrn^|*LTy1ilL$p!_Lbi9-)=4 zpu`Ml?yN)gc(I}VW_~iz!A(=Rs32PFSB=Cb3Q(u|^z@dkrR~pjZ4QkfKK8IncJsmI z#AoZdluDkSBKsoM;%R&B`n!9*`)=1Uf`+nlnGlYn3D|y=?~2;}?)t&q1ayX%$RQs! zO_Xu$z4QX*KAY_7j>G%@Um>h(aU4S;XaIm1vVS+pa{nij?Ege6{I@r3lFRL%va;h1 zsUu=WT0=CJV6+efd?_G3Mm{h(1U?{eO&~NaQbt-m-JeCil$=&so>gOdrKIM9#;i(1 zVjB_y&>t<0=BA~q@;|56mtAV|?o(biTU2i1x(uG(*U@g*RVKX0SsvGt+V1ZssDQe@ zE9ZYTZFBv?vG8o|=o56gd6URib^thO4#pI`srHBMy*vDIDUmE4brGu$#wbXuh9I$& zH2QVZkhRWxoL2V!+O3RHpJ%oJvU1oVT08d{tsMO|TbYWcwg%X^3c%AI*r##+wRZ^f zpjVt;_DAbX#WonRNjE0;;$V(u2x-qe8WX~lBaz@Eq^&my9A~b4#~O5ED3I$x!dq)F zntO1@U-f<;qv&K!|Akq57#p6ZGhULj)sZ{iU6B3*#>VjV!buQ+>teuVS9s&e8VB_- zE@L)-$0O_pCCI%TaXb9lL4dMrTY9d2G8DHDmh;BB!(Y;c!Zq0sSNX;o!j z_`(f3`N^Yr_bcmGaOo`?>7&+27de1FLry&GHhO*pIu5%+JEfri2m= z;?ZrZS|m5M-s1-LrjJ%~VW%@Fh$j1C*zoIcni!e836`|BBVm)ADuSM$$Y zyji&FM-X?v-8Egd+`+ysxejNLWmO@6i-*>Lk{0R}>?dM(1ED_#Q-3kmmZ{CQ+YHeG z8(bdGW>B(u8W!y-0M%p9H<$#%1Y<|4woEB4j1N!yHPIojmh=64Gh{8j7eJC_rFsrq|jDHvWe=6l8oOBYYM43z1qDRJ41C#nv}yFbd1Nz zh~g=4#T`;JuZr5xS%Ld|2N(iC%j{jMGq`mxHNs0{v$Dk0Bq*nR^T-A2t0kyXTakO0 zkibo;^dVr*Jv=xX)!M5W3r2VLo&%fS^!ckWBbx@Ibh$`De}?ouy8tO5xQ=2Os=fiK zuqUB-rNf>3R0*OT*`q2d#IX{==~IeoJ{lZlsDS1@!QXIsHk%06Ua=GaC8OozlEzxEaVFbu|YZ1=y}zF}i#R$b}=j(3FOp<8ey*=Ci0t`QKnO1w=}z{W1_F7`kSse#C|oNsH8$a0FpYL-qmbV; zEI>ergMXGg&=A#xvH{Ci&UkfJcc6iMDdy4ow~oNhIw84sS!Dnlkx!uApOSrQ5xM6> zlu5UU^@*KTg(N`)Hs1?2j5&n0vht6#Swwx!iZO^QD#&(}aAAF-i&S+xp82OWmjMFR zIv!#`X60h86uSgsaPwG^RN*8=V|jPfR}p)v*rs*VvqNFCIbBN;vQ$g{kPH0=1BO|J z1L-&H$cW$l2}_e`Nzn!U^d#3eRK-CO?~!qfwLSBJYX}jN$E+$^d*jS4&wCX`8`PxK zp^Mbntu2ml!fqlvApxuwx28l`q##>=jF1gwG24`DmI<8{5*jHv_Cr&qv&Hss+{fHC z{GIxv&Fmz~kvtRYpU&d0qOT>49n9Z-u#CDkY9bQZ* zr-+;r$lt_+eRV*%k*y7nI~K8TAVWA`i=o}arQH)TisTM4M3JgQW7KT$9wNmAt;dkR z!1YcP&!oO8bZ7Ngv8YaNDzAE;-MM&SlEq?xH^>7dWlr>emhUe)vMjpe0XYDV-7+8@JTvIW|5QuTN zV^qC++`nGcjb$fP9@GAI|VguZz z^oD+=xDVU59RfFK9UkRK?62Rj@(1&mNZ|U8AjFr-;19B2`Gtime-C#DtS`-zT%nh@ z>;>a1^wsmvAn(2o(nt9}S~}$mEb{N0YznM?pVAkbkLWO)ooun*$XGGIXYpAT>RLjC zkmR-7ZW=a)vYm8_te$2iPfXb|AmFwDvc_;A)G6gaX(Woisy+h&yHEmi8fSQ|T{s!# zlDq(c)i+REG9!F0X@S2sz2k*pwxu`N=E1l<<1`Cfr4p)|^O)?D0Gyr?`7D$@sfjWI}q?ZY^-OQcW<|G^;r{$?c8jf<48 z@HIi2tq5z>$0lCjDg@E%Sd@se<Y{qKG_8_)ESGuIKe$yZa=cjNF77eVnFAG@Fg2T%p40I zhzuk2tFq=hC3kA{JgrOGdv;Y)5?4 zwx>Rciyt}x8qyj&Ekw*9D53|O@f|B4VFl;uu^nUu?1PAgpV--*!wO`uj+2a=c-@Su z_)sEMs>z~;n-}TzRKZxdpK%&Dz2N)kgGcCxBWIU(QEO9;r=3)+I1%JI6cL)40L9_U zdiqRS`^dY|&^(i29(zXwL*%SDSK&dNGehE9>K$tj(hi}oZt};I;#j#p+w{`?wQz9~ zxF*ehL%G)V`D|T01fjK^jHo;l7GH`H{L=4fF%dE02aTi6ViaBCwVa6!bEfY)CxAaCg79!Iwcj*y8I(R*Hy3eU%Owy#rP^tvFjMq46!MD8; zoOw?EolZ#VBI7gS=OOj=r#m(_`-b=l8X|pfr6Px5?F9SnBa{xPcVw(@1apJisVuOK zjLHMbWh;bL%62?h@^&yf5L&_C3c1;3H)vc{VJ=~(6jMVQ$mO*`bs_VK#bJ!I<$I19 z{G8DV4Su_uv41qI!aD-Z7ZJK>aI61*h+D~)6@_4uB@pxaermL}Km)va1$V)QV5UAG zKvv`E6MQ@IS!Z&L?H*5IZLA+a2Cn%r_);xAeCovVBFMb>?Y0nD3$a}%s1;1uyx7^o zB=k@N$N^h-)#k;e)Ak&^!|Z#JZh(N{=GOg$w5gnm5Yv-oJ{u;kV`PnypD{xp>OH>*+g49DXlSHYH3rULKurswnvjMyls1@jM?ACziw86q3_hM!o)x1ENtSYRNcHK9==55|Y$fapR(x z1Aro6iV&K(j{4mzLtDF!cAn?CiCf>yYk-s7;oR!X>xF9Wm4)kiwkH$ka1j&a?QQ zqaiVg9q|p7XKD<0+N{gW#d{d}_3_CoSBGv+XXaK#KY36`al;Z8ahDh+vgoMEsn?Yv z-KAZ8ROs9b57^+rK;gkq{0QE7X+~WTIf=9)lrM5Wuq(VaLj^wbSq}SI4f|PnQLT5R zw@z>}G=~kt0ApZ-dZ^)ie26Zn@)Y7u;j*LiAUZind*R&`Ny&2$8wBDZ5|x6zWbrK~ zgDKa4-IB+koGzelEB^}X>2qZ)csWK?&8N`HFQFBGp_Sr0@s;LEX!9eu-;Z?Y3xxSB zWW6pIgrohO8C*D|Ze09#u5kx;reJQKE@*C^s9mgTINQbBuu^?nMsO;zL=y&ZD$>2a zLQ4GvX@%irnGN0qmte6heAaeUkqr>>4G=GSC}zkcW*g7>NM?%AbKX+YyuPZ?b9ukb z_M>|(HN4F=I~G6bf^i+n6|0Kl@396ej>Uh`%6$$p*$-hJAjOLKK=6*^nRM_+Z9O|E zI&|mE(UKoXP}mao9+$K%b2_Q;PNX}59q~f%KlK7d6=VsN(cY~5-toj-SntGn$1gb# z4y>yw!9^Jt;HC}+%^8L29A%e;Fol6N-5J@K1(j^ZE=-IzY|E(doSZJoPfUTi}B65E9}I%R%|hm!Qzb$Y2!xYvGx{7Ce}mW)*e!d}~!GWB82#b(Os z{QZrGR$ZBU;3D!ZlI4ZJbSu9V zT`{)rB+k0L=`V^#%wNq5sA)-gW8~qma(e@TOx)ImJ1|7JoZ<#h;`teO^t2tq9G;j< zz2YkYV1P()!$2*7R<@)leclcIfJ!^_YQWk3`Y%A8I(-N)Fj2m$vmo7lc12ao@CV;L zm<83J#;3$LBWPogOLmIq!_t+wtc~7SUywEkg%#%@OxnTDeE~n$QyBPV4j^@*6Dv{| z_+_C@Ul}5utZ(y|q=6HpYq~cnJd}-3)*8A5wpnh75i5YEdffV%70$YYZ4~)bEzY_U zM*iE|jzApwVo6NgsbLdg#*bTHh~lY-oekam){-qdPm02)l##vqpNq{!5l<+tjoM1D ziqWl{(RE%Fd4}w$4s8IuM0v)TPBaYR1Kn>b!!<-<2Z2CR4q=rZU>!cC9Iyq9Jo%F` zna0?nqo8X>kqsc({*?g&TB!@GaFra#2*8tT&3oqnl8PWYGtYrkv!t6ZtaL;sM2qqA$_nAw>#}?tp(7j2FkiG@PbFD`Me8W-Y>!Z)u5osZge_jw*T?D`$uJVOSj^Eg?uaT5Zysx^W@5)!! z1m?c0VxPe(X2;sUcp#!vRQT;3*YQhvZt)yRWfe_H;z@fDfy!vUz%6K2PFzQ-M2N

oa;?iMxWMV9Dx-xcv281b7|>H|^w162BhS9Xt7PHsxN3wBq$E_6JVXV)Q6< zJg-~((>s-M=mB|GQrhoj6JqHW9En_9XTLN-TS8(X4@kU3rtz z8|8fAJW@l((G4fV_7LeHIcF#V?9=!9bTW|h;PmL8_BwbQ2|+Dm0vbm6WbtuX(VxFn zLm0nqMFhK|3~DO-B{2tGO!iYVNtA;_hkfh8IEwgP&}Ohbe;e^t=d(^DZVel?$nrZC z@FUyD0;B?nko)tD;4Dq#7gf< zJ$8Be{e@ybsyRxul`gWT7Qb6Nltevvqt+i`8T3lkbAQ+#g$Hm^pzBlKP)p#aB#^EM zS~y003labo1*g`3t10jt-rTc8!+wQxZ!9t;6lV!&8!E=5S?|y zreT8@0IwLY*VSjsHW|0C?AYA$t8 zHa7N#X4ZO+HunF=ANMa9q@9zI!~X+p=11e6w`wn>IV1^jQA)5zRhLr&3oxZ48X%a( zKzKA$8*(;Vtz55+9eA;MC=KP8rx59nhy5bkXPpnid+3!*pEzuvVBfBMKYzZ01&B|P zAPCwea@4xaS!Z^`oYf~N9pHzF`f}cosEhHE@o~`X0 z3j~A}_I7w7^Os5!a_^bRo~pW6-Jr3fwV|!9f+WqL&!(r-`Ry`L0CbEmXhL%!V;7p7 z{z?SVp03xU zz&r%~ZSKfdT|uJk)RL16iW{O9qpi^RNQh}pKSLANRSAZwpYQEwPe>4SQlIai>#x#$ zLF|>B7c%k{M;ZvsiF-OoDzHKVtedkNiIV}mAe}eI z8~MgIGvF!7b61#JyG4jnsm>ca=E=X1_XtB@X?%&_l&~7aB2gaY8kxZ?yeetPm+AKv z#(%NL)kVIR`+J9{GE~vf#E{iC%@IBW-wG-%E3P(Uu+^Aq9(d&BBFsDZODVpfl>?#i zlW2deqgX8>$ilx+a||_&?m3-&kZ}oSWhr+V7iIu$JDNT!yo~9NB|x%lCV6q3@XZAal;&|L*npkKB;|+PeJ)rlI^E% zGDG}9EZmw%W#`>?nVMj~zkENg23WEqh5V%or8P+qsf7Z5P*1j#=8ODm8M=a@KvF@x zdm?7y5EH6Yx|kYm$U-5M^ix~0#c8WSoKf9DW5e23^~|9_>XmcOfR3eQdkx;|cYRrc zEvwa)n;#S=^YEpbXLS7H*&XU1>qblRglqMV&G@mnG1RKPCKKg{);dyLyTzu!b}W7r zbYsxe=V$LaULFSb(k|r+)-WUeRP(38&8Uazf$^>z&tDd8Y*uhIg4C*&mv^cgXYX@O zO@TTS!-hK#?oo9caK0(&S=V<-xcoGtrUNOfN!Wv*U6O?h!MRSxhlD%H5N%|PWE2ea z2l@~%PFs$anhl<(WMN!Oj+s@q?hEUMV&W)8_EVUcKmUTe$`9KFx0FPi3EH1~WLGC8>qn#;(g z4P%U4U$V_v=_BVc?t^^ONv!oUcfaI8gY@)YoYAhL!pwJ^Eg!ZUTX05Zk8NDxPOj5K z&xOx6BS@8pQM&TclI(-m34Kf{mcE!P7YMv&ew$vMY|F$IsN_7dWl|8KkJk19t_1g3 z&ZWU5*x320Fgo^#XArQn=cEED%vAEFF&0SfP`OR&WjSMPkyIB%z4;B?_kE0s5~;$( zyam)g3u;{hRfXre3>3N?+w#=N>I0&J{REujpgM~PszJh}gwVAJB5a!j4*9f)fJfPX zy8R%A6wxPo`lv>MGf`vz8%>hCeZCa-bNc81?dkuI2;%=LZTbKDfd@6fJ+T(uzJ1z^ zU6`8!=zi-Npr{$BCs7&D>5ig}2lI)<^&+qgVc}dx6*Q`Fj^pqEAcCb(0*kRB0O8{U zLXp7HiPTX|5j8-I&ofzxt+klVwVP?Uvr7M(`kuU~Y^*5n<+V7Po_ zkp?&(ZO3`o@q*^P+ZldgWDUDH#_--7g8v8vEqp0GdzFO6<)s{+zEwSZvG|ZiR{hGu z`VP=>znOkPU3}x~?{2%X!T8$rr|8g$l39zbYKTOKSyCS|_`XvGc2LGIB8}QfzoC z#fh==KPtN&2&ER{keV^96OxXTm$k1E7LQ>qrj_Fqmkx6^o;boLg*9tU#V|78y446A zS=cv$QX(tg8~KWw2aKS)*Jzk88pM(~r7d{W$e?)45I~1j5L-Wtv4>?8re&0my5ThJ zdnHrtYfiZ!_JGi|%6U;e=SX8Po7s;-z*Z%QBx@D0G$>qphDy??;FfF6Rs5|~L8_7; zUpB9sBBqAuBc^Fx_$3HvwrJSNX9FEPd6E_bAD&9jZ#Qy=tkkGJyA`BXa@=tVZKYyU zjc$c70i~|uLokQ_Pq^EqIcGJ?NC?U&dv(U<;Q%OkU!^YO4nv3gfy>c=cu$#linM^f{GFY451#mb7Et&A+8{y5-iC7Hqq}b z4al~_7m#uzCIqxKg-YE3exb^BzE9dOj#=gJfocOtzpIoasD=#6+<5X z}!uU0bB7SAwz5K%&rumqd;@W5+jV>M2$ zWBGugw_<9CkI1k{?K}d^-F&SHlM@OPU=;--l?6l^l9YxTw4fReCr%N4`eGWa@%Ko< zYM^|%FV@smR6&cTrtKg^F{@#K2WAOXuWdE;tq#hTM(^r;`{t;{*)57Od1yW>e7cc& z`{8D&E*T%*&ljvwFa2TK>5)*?Iz2wiVMSJ&u(=4)iXN0)MZGyn)DVf9A|rTh#2tUL z6!zG{lUp8j%A!a{`7g{#Oa$WypgEOtZAOZgvLa?#vOqBB3$8ON+6(5m8ZYq?q06%< zjZfnSX1o{`j$&^I7pc}dPwbgI@;V4NFVM%o=;7#{M`|g{7ERRyqRJ9 z=PN)r!3wRs^Z5Cht!_1lT@1ithBYp=zO!4WFl#+ERb{5^`DF;o{O(P7&;< zVZ{@Y{gb%fk>sNI_L8ytBf~h|*Me6{GUj~w@F81E9??9NjXTZUASZKUslZSw0*-wV zrY&SFy7khXV#8ZA!GYY`$vQ6yqpLJF5V=+6vT}zwl^r_uR9{-$5($1R3#185%`u|U zk@)nT4RNq^7`(LKwzr1NY|s;vuMtjmj4|heYmp&qf1=@`O7T?*xO9aG%G@-sDx!&L zw0W(V3_GM$br#l26%a7{jq*Qcl{(g;%EG&|6V}*aA?c*o)P&6Ds>%pYbtel(f2;7O zX;qCPr&%JMX2fi#KzQNCkH4xhnKW&W2DMd)&G@i?O3pNa@$al$WOewUWu_*IDzGU7 z@X||uYqV+>TT(_+?kUkL;Q89G`$J%_|4DUTXNt-86JZ*ZSJtHA?TTY(vtJdLsSj8x zP_+HN{#%KN7Y<~r|Hwhgv?(9bAx^2co0D{`e2+-Jl&^5hNouh6=ZNWTJTRT9H4cM2 z6^moP^e(=k72hC-Q}+eJ@T!a0?`bqVM>kh-qk8UVuPtV4dxygazHe}wob}`Te@v(5 zS1$7yW?NRPaLwtDllE(zx0A~oHU3i-N6q24LZe2XI$0dXE!}ixU#V4m(ylGaE5Kph zPs+Sn6pp`{_TmH{GKQ(DsiI{jSFjoJtnRBOocf?7VIz!=q9l<`!@pW3-c5s#K0{Oy zP7MFY8m=u4oxN=gh)qt{MryT4Ej%_yjkv2?Qj4I1%f3=3IpAW((1ages-r>vVvV@P zR6@LHCjcro8KaiR9ap4FO2>i8{KC0po0`?!KAwhk9OsX9tSlY*+@VUVbh7N&r5|Mx zcfyH1=o7=~oKbb$Ri-^Eae~G!bkJw6P!E*rJq6))Q~Hx-`Tf-el4_4qGWtznOss3_6{eq+}*PZ6H-alyM9-PHo91n~lz z=#hMmET#0944UlZ;hzLGSIPLkeKw73N$v7&P~1Lhs`1%ffv5OSY+6N@+e?uz8-rM@ ztcyk`wwT#Xq{jPA0Rh{_pqgfSEDLGuqCnjC=|utH&l7o;+Fb_C^!T5)i)2*C*EBAU zpurVoODfIZ5};{_53sX4kwIr_&Eqy}1n?OdxR7%u0+NuIEQKsvIFuY3la6lk+H;5J zuA+24>C2@<9limlk(%0s=|CP-@Pz{1QapD4)e*bq5Z5LBVa;lxws;ndjb<5}McZOC zM0;LE%}$leHpBvenwRa;aZ}2E9wc47Y4Z5MUlE|szYVs~5-EiY8irGrUP`&O%ZD-R zpr+0a*{I!WUFy@2nfGTm+puChKs-o9;rNO2^x_QbM?L1Vh)fA_SV0Nw2H&!D+33O) z@|W=+stZCOu+6)cY8xIh>k#pYZTP!JeJSaSP3B74^|X#czq1lJuT_r3aP*pFqo^eR zgFHpyh%5Y=lb1U5S64>bS^oNgqVTYMlrY#R0G~%Qkj2r4G$Lb;a@8o=J|ChE+|u-c zy$L=vz%;h_cxELYY(3r7RGcMEq1WdD#gzTmn6Q=_BgtQb`oB;Z%n1kimp~HxNq-zC zC2dNV)7z3kIZ#$6u5*(KzICfHk&WnK-w_nE5 zkDTMV1IK1`zb)}}aT_bCUEkSiCz?ui8#2+LjQd_$agq3xqacW`&$N0Sh0-z^v%-`l znBOAQf-f6SkE)NX`=3Owgss;`DDLb@5#~GFDZ8f+i;ML&gxX{%47-FBQ*l8;+=}6$ zO|IJOFIxbhAcm|=6sDp%#5{}l*E6o$(xyVS_!1p0Pt;5V)vK**Qf_ANWG8pkw;mN^ z7xO=s-)f71f3b|H@b|w+b{-5Wn+=4Nc^YgQZfN*YQo^!gi@ju09-x;-JHd}{i<+5) zD*x$J4|Q$F#)B9ftEI2B`Qt+sbs&lvR>Kw-VuEGZ^mq955wd`JUs5~ubMXKtDr$d3 zrIjBg$#63C6oZ+w<_|M8PoF9P1MAx3H=t^%@RC(X_{N%H07B6nYW`x?Vp0lx4iNRD z(-joMD`~bT(Zn&_Q9bxQd%&xL%8{f|g|Ma>cp9Ry;6Y)Vh7z%%7e6xZPY=An!65O07230uvs)aGwUMFpFwgP#OC?AxBUW^*LQ7( zS)?xAG`6Y>rFd3HH^r^lThSM989NN9>zcR8AeMKv&dmr+?jQ;56Pj^Q2Awp|cpztQ z55gDgCy{u7jChq{Gy@(J=$O)ATwMqFcK zgXw;BG6C2glOJA|ak)gMq9C2_bCCR0Qy^G2Yt1o7LLF*~DkpI1A0=g`kiBI&1x~*? zYEZc*Q?NA)+fM!J$h8@X1)IOGT0yC7xW&6b11pT{zJ6>7e>c~BGY58uXf_7u11+e# z1Aj^#@LOPe?-|wySr!=DeFCAyU5<8)FLvLPGO}cEE-&^~To-0N5bXcjFq>Fk(v5)x zw*vR4$Oj0fut$UubVQCpv6#S?kAxa4=`$bIWcG5oARV=`r`VWmW3Qwi=y=)74l0v& zWEjWQXG+%nMIl8eL>kHz&%=z9l(c~DOYHt}-`knl*ZP0cJZ(mL#PewrpD1)CN9LH1 z!^vEfU=C3Y`o_;;rDPuTj7AbaE)x5*8Qp`GH7~&KEMMFNToHs6B;ZxxX?9-)%)w*rZMiQ#k23lA_p_0QVtPr%sviw@JMt7I@ zsAq0=lq`>u^!LP?WuoqdCEH?L~x^nzCkQ}(FLCGAAk&%1}tHIA*aW3m!_Tq04tBO36E zH9XbxT$4SPw>qX^p?L@@Ze(}V9h3Fl`0#ZQ-ikPl*9z>Z;t& z|Nd=(@!J>HE;a}sI@tSHbX`+pRm%_6OYZ4jApLw-1Z3}E->T(*%Da{;>rvax(jZH9(1PW9C7DKRP znEXaDvk};5Y_D9Jd^D4_6x^MA{+E#|VM962%aU{y!#TgVn-c1tL_>Mb%P;9Ljr|G{ z0=Hnt_miV8{#nW=YuRwCc4`S@u7LY0>ZXK#2Y2si?y$+?+yg<~t*A0+{}#_#eyv{BMG>Cgv+My?1>kzsX`V*Cqv;Cqti>ccMw*|>=6!TcGbghO zf9g!pRO6SQW>lDkn%$(qht1DX7m@uuDu21aEwkI|h=-e$La@9bY#u7E2vu$ikTomH zUK73J^inpY;zwcWpVPr8AG+WFOlSY2#vm=CfBTG*)VHIHg@9Fr>h%gI#nfQ& z@&K{SLI;uSkD6+6E#UUFCWOt+D#n|B&@?B6Z9M zy6kRRBkgkM9qWhvZ5`M5{!T~L+00qQE+Ifv-l9YXM&kJRuS4-CJxqQB*o@mwC1 z>{j)=-UrP)4wm^4>-bm+%?9)KIUATBc%KGo)FFE*^wWV~SP~P8W)5t0)rv-h=r<0L z+cF*!@O5ozw|2>ygbI96`=#f;!sHP@8zm$qdGd3#^D_#C8>?`*XUd(P&3&tCazznt z|Ds$l5&#m$%^1K_W5F_oJr9-4Ch_})wsAzr2}u$eaO@6^&S}Q;`jX5?fIx4pM*Jyz zX00$%30p>kC#+49JD=tszBp$j^fm0;8H5s#A1!zy#XzwlWlNjDtJhgG7J7Ix)G5YU zFLDZU0yjuT*{T|Zy0v!UK;ZuUYcr0wdeU7@_N2prYqfZoWoW{XsY^T@xL<+#$~FvB z!09Uk5sBKo!NO}|Ug|rqX>(1R8g7Xo7oguvNPsIhw4JniFP&7@$Ue+T_`!=>T+aZ) zd$P|N&1<%Xry-tM;N(dY4lE}{f~~@Z7>aR@4)BONu1o8kj&mwzM%N-HQdi}QdXO*Z z@If@VqL|}2jG3^J6qq+rvmm3sSY;xVk}9(KvIsuGKEaVB(l$nv)3NC`FrUJ_C7txH zt#dz)*WmGh>WXUg#+|yi++XvNTbz3;g7RFr8i!Ep$YxTX1@$9of2iV6P_M_{C%tI8 zXhc)y9K$%DSu95dhPl(-M+>;fQg>|5eJ!Hp#2&aYKtzq30@ur(t19q8%aZ9{fy8c9 zN#JB$-wp|}n-Oz#^n$~TSn4`f&#fFM+P=Zq#i>^GMw4OU%*XJdVQvb%0AEtlU6lo3PYz?JqmK5bhB~5;0#mg$_vYVm{|7E&ed23MJ4VqB=U#K(q^~fjR#E`@&|t}Zm9Xtp?5qu;Wz1Y=3a(HU>$T4 zDDDV|cGkfC<0n=7q)d#KDW$V6LE0DZvB}t_3&i}AGl&mKgLFX&TGPOVmJ0gP8;5@y zttk1vro;-D9rOX01=3TPW&R2#{8d(q=n7NO67B}JF~d?}Gg=41A*TBsPaV~oO$Eb{k|53mnysi^>C@rrI#r?OV01yY7eYaCG^ zgc1c2XmRIbQ7Rk?;${V@`-E;sLrU0KNlOD7v`Ib3S%r(7bzcxoAFd>BCftq`@FyBd&)I5r%B-oIx#x5u3> zTs3)S0H*XXgB8d{ktvu6ky);QJb9Q=7?*rh%9K52K$||tAUf#Pl5w9a!IN7K;>cqn zl86$gQz)#Px$W=4Zd0Zt9gbXvUy<#pve!RTa}ZgZvP8>71yF^|E2#uAqmY<1Yu^`i zZr|GLq>X89(~N#UhP1=%w}okar{NUInzGOdK2I4geWhXsvPj;bPzZSwtVj*;ZRvbm660&^p6eJyK66l(NZ5`?ooPs=$SnJ&@ z!<{WYJPKYdJwz}u9^=X)O&vS)o(GQa+6)gKr7I6I|ID&u3>4c~v-Ex4WK}xvifqLJNEwLFr18SH88+?4|&#lpbAUfVy@U~_u>p4~& zA<^+NR4@(6VS0$cge)Zt2XDI84(q20yyM{nVX6>-#UooP-ne>1vuvP zhz{gC9|o|XWsy^;BohyIS(LsSVpUF{MqQST>;(Q~IKp^iY%hVZiA^|VPh9i9?VMew!mnMe`V`N0z+*O>@ zS%|p<7Eolz{7l{~-TU$e6i$0QJh@QLp!LnfYJNx$525UK`G)}l8aB{x(}9>sLQbao z6uO_pi82kEBH|$EUz+p4ng!ma39OzrdA`Vsx}Q#M%lUoxK8U`(a3DszQr>eQn~3?5 z)M}J-5`{@Sc(yj&EHl|%X$yPr){$xe3pB#AEHi2g5|VJzp;`)6{NyWURcXJ`3}yYH z;1FzDL^Hp6F{4&>^dOFe&j8;i(_80MX12)-0ycs>;(G_>vBf``pO}}BKrM#8`d%sf zjo2!G>$faEu=iVI9UE-SwtJNFMh9x@YEDMZ4KX-5WPz zmZ_edE*M)5_Uv#S4(nU)#H&0};JWbfetrY|$~Dl1DY1fx%l0*PF>53=%*S@$RLq4sud6$OI#7JNGEWQhC?oxJs$bef3Q%3txJ`mDU;}B1vW3z zxzbn_mCIG+0b zhfms#ci3c9F5FoJYEVxl^1dt-uM8a7CE^ z%P&RS1D*hrR{L3k2x zY;ek?&^gQO`p17GKC$M8Rc`@GSG;A1kd=uuY?l!~DaUEk0K%iPLZFhWTQWtEsc;72 zSX)A*$B(OUm1SAAjg%<|0 zU$=zu)5cp~uE?#plAVEd=bjx@59eREUnx4*4{V@zIJ1(0WdaFzk4czpvO zt!MADd-C28WJl$dcq8u2qt_Mp$e+lDYhP|oO}K<{SfTTZ;5cEjd7Kd%Ia`BSHR}{7 zz_5lDd}9O&9DQfVBvmHD$czrB^$w>El$q)&)^ckdGdIrkNByW&!Il|OSZgnU2FWPf zu$ezL`qBP`zJ}mWc}+?&`*vF9QF%b@`>zClBJBHfHEZso~j(Z z=Z-j9JXM`bEEf5zeDndBwnjArxD@)T@Y3>|rSRQn4dGq0@- z9T}OW0dyQ=^=Qi!blHgO50zXQrCMBgoxwq016aPAXJV@`O;d6)=t|qg;3YcX(oF&Z1{)?Z$JhZeR! zogvL^13rcypkIws{w8)|6gzpwYa_q+d*7|pgi7A=cmjqmm%yREQ2&{Z#&c(hil6`h zu*v`3bo8GU%voCgH|ERX|M-~x#rcvSmjR+j;s!Ca72@~&{0r%%$J|EOE1F=c@0S*$ zrxV11B*EDq;;)LI?ypwqd{o2>&7Rg0b?!K#ztG!yFAdUTEaAkY|;iGy^H+%%>wwbU4{yI?ACQ2clD#6rGj zsu(Uu=%lIt5!U<;00;;AC-Y`>?2NY|;T_v5dEGPMlZ*@?^4uZ0Yk=_FqPm0>PRYbw zLZctXD#BSovY5U;a!mKwe`VOA2cOj$f4E}gKc0gBf7QuDBLG)TWDGL+xJ&Tqnajh2so`hSVNcx|T z?b`HIhxOO1)b;z@*C&`AFc45o7#3_x`h#-*nb7_;rrJ89>c*tmLWCi){uss2<|@>H zxZNftt8miZ#2ISuWmC!NtSe>zl0jjz4$x7~y)MF*V$agb-MrOD=I6%5Sd_7w`l`;G z0J-3x+SnUQ0V)!@vjdpfF~d#rnqFi`FJKYK9V$3*?Be4 zP}@)gqx04mM!bVNr;E++&DEaYf~8u#=+b6J4FfSw{%m&#iPfe{fw$Z+?#E;qiW)|0 zI4nIk#m_D^Lh2pco43)n1mu3zBO-Dpg}7oXgeD ztItykof4hN-zXxX>{mp1GGBrIc{5L`hYJ0Fo_YiDzkBNck%vme$lAb2&fdn*$-v0| zUy23Mzg|v73t2>dByK^;=1O6TF4t1B@qE7uxX19ImM477WSUbHsRKbqOVPHPP5gE0 zFCyOZQ2L>pUmx;AoaF^X`ULc=ttL}b8xGeSt@oe9%ZLEcHA%z3Bn~466r%NJ!Zv0t zl_S_j#tE(E6Wq}C7)NMJj?bC69+}eK1>>eV$D$kOV4pGF+y`x>?SIhEL}McgNq==> z2s50~LtSb>t(s`>1bcT(#b{7n(iM!?QKN}i@ghBXyT}SjccIQ?(`&l_FV@~MywWz? z8jX#LZQD*Nwr#8872CFrift#Aif!Art@`qI_rAW<-#NRx_c`af*7~v5&*z!kcRCeQZMV+my^tCc3s7tG zo3TcDRm{+&;ik$E25Y!6CGp_6OQH61de(ILS>GAa6^8?J>}?}nsfBxBgpra#H_xEU z)$QW~8e9oG(hNWT1TfORQ^l>P*n4OXp4gbixKFEF&@!aBT=+V9jxy>tw``a-%`mrQ z;>h)R7_-xrY?h~|=vFZ%(GwPplwQnPB&g+WrdzR(w_Bwo=UTK>j_Mo9q~et*)}5No zSu|P?RW??7SXJzFSgYu!uI65{YMVDR%49h!R2(8mrZb#d+J|fokal~zVG5IxoJehzQj)0-Gd7#E znEY(-#BiHo37NOFPbJb#;Ok-3yaSoRgl`vWa$hRpS7tkL@J*#*IQ+>^p@rm%D9LUJ z6Gya_KynaKjuFd{EP6~`LnFluB@UX$o{S6MM~8p!mA8oaj6_i-wf)L`AMnv0_F7-k zGY!xl!mB)P1=1a&j^MuB#qaa#=)ZTbwPQE2+JCIbx%M21cd8tiyBspZ6Ahu03VtC$ zGfRL;oTLt*WOcXO1~0}C5dvRFoZuI;;5C@OApBOof5(WL)ZVL!D)%JNiX{B-Cyc4` zy;IS_|L_DnqXZ+3Yxk29!Q7^)RsC(uRGu<4Q`X%4m+?hoOIGp6sO6emfpXKiR?)b^ zduTLknFoG0RT&<2ad5&O>zGTQCC`N1MBOOfubCBF?#v0PiUCGfpVpm5o<;g_ttl(C za{sicXbkkS$GdxU4MX;7|JG1iazOk$>5O(^DWnR&f40|%Z};-sv$VGe_XRG=2XPPF z&NG%}P&&&vvL$q%32`+yU7R@PqycAtFKZLli^HsFe@F5(u7?RPPZgj*&)W=+=F% z)Og^Ud3^`*0(KpH&W~aMR{-sc_3VEe+r2@%dA0i+I<7q*#*O0#x zE%*8DjMJeN28kE5+x0q*05S531lS8B_SIfx*j>g6AER&UZtu;9m#C1BYL5zwKklY6 zXtXXWnTZYB>J`qBx3YNtI0!vQWr%zMFfTzGWuhUkm65KpcLJ!vylm#UCsn#(hgJ=I zbyIRCa(QHJ0i}GXZw*(4bR({ zufS`_FcRuWnHW*jJYT^$MjnE#LUxb^j?J86Nn%;E)uivs zUX*mr0DbmXS*w|aH#_Akxym=T-b7oIy3E{H($R8Ci8zI2FXj{&e%nJo4??NB z^rOv1)Gjj!P;DpIx#Y!GcY`H=2|LQKbsy`|S+4Akk&BXVeHZ5@RatI~l+r4U8U2wQ zMCWLVR0NGuJ;D8(5RaOT14-=Azc+mt057CK1{Chi@a9Co)5HMfglwJ8{=~O{->aj(gaF zwM>{qHFh@F7DlQD$xacx@L6QyuitLRFn$p}q(#4$;@hgG{RK&k#hPq&vm~V>UDrwd zXx?L5Wqaw=&zZohTEkn4(u3A2iz(8aU~GFrP2UxIn0Uw5j6)4IEXrkUW-6gcQmV`P z9h=-b#Rg+7^Jv_F8AjbCdtz_u1AK7R0U((sSt{2kxTyf+7@A#s8=YwJ@f(?dN;lQm z#R=Mc=ZCf zu5pGrJzfeVP+M_s7-{JUEYpETmxY{ei0>G~Iw*#U$&^m%!$QpGV)XBNh zSrJGB<&q#D(v0tUVCZ)P0`zxv>(iQgf-?a0se(SxVA^YKpX$#|L0rH6S-!)}iTAE* z9>xY$b4e0H+o%(X_Xc$O`)}fDi+lVEfxPQ_>0c57>gus0t3*hq#3i$(-c^2c<(*q7 z4Re7WTv+JIkF8o~NUxJ&rbeb-&vV5dVQr9^|9#rQq8h+!mZm#DxeoVx$m}gesdsuX zyDowoO|RrN?d5Kk9gW6MRrmAPYbLbB6Q_K*FqyRNn zPoRvv9UGgX(Rqyz^94nTXG=dW7?$Q02K=hmrC{_9f3 zq4`qNG-5my7CtOriZ4al!>=|!9pFi-CQaGFT`iB`hWe`Im(*3tPc^1rlHvykPwePZ zF1IOsrP|n%uaL37o=jtdLdI(P;G;Utt_A!Nop%e(dEjbYS>AZJe}7`r8f2zIedq6u zM@p&#r?uk-Ejz*W>N8hx!9K87tJQSJzJ-=cHKh9q`vP$($`z9f@nneS8PR}8FaXiX zaTwirN4I0VEHWUpLjKsV^CI~i>#0O@QTOIpn2aGw<66We=Hzg`ckEDfxwkg-XIhLX0HQgeX1(K!6RM$_sH?T%^ko(!E1Pm*2@?X?r_dD zjDN`uz;WEwG-zd*u$g(n}3?J z*1`Hy&|7-Zz0JAL6$F$@kwUWmxU!+~q9nrJ57$P(k8;OjLm^DY#IVF9U zGo75pybiMl`Q!!H44ao19-jq%Ihv22C4y&{@T{Te6YPG%PH$4Gl!f@U$~N zu^mmcOglcc{pVq9%MbPQu2Lxh0*mj#Ayi(qgqi^_BfGTih6TfCuj+t;OxDiN#g^MA z@36PilG@&lC69IEa(`T4jN>+rI%K;Bl}=#*#!L^*1HN8bFp;dznpBr463Ms=y1JqQ zcp?dYA_;w><`j1YtDS0!q}cGNuW=Qr@i>`5$09|H=+Yd6LhACIY-}~^<4bYvDRkvz zlUdW4kZxFXO2;ZuODmcucC;yFL|CY15rN@|ZxXOKD+O^oA5VMTQgoQ@Do;8F(gv3c zqwu0ap|KDy^jo$F&eoD+Jv92F@cU7MD0RiP`8&L?Vbl6mIdAutAa1Yu`Xa}*Y|8^s z=ZF4ZtU-2(OJf%b2#5&h|2Ks7Z@v2diy>EiG2}S~OrOy~?nA$D4Ep^1q)cK}FxHv0 zdEMOhrZIN2B*celyxi#~>9w7%YrAJn*(jzEf^CM|#2Y?Q+;Gyt{=y^oNk{rA_bJa! zpSPO>sBRd1GXQuZ=p%setrU8qk7XCUsqh>LiE##2GSWMr zNNG%Z9(<1W3mbga}XH z1IY7VX*nkdx=z$Ny`=)%=eN~WGVW#bu9ayWZOR5lEwO=WcZMIN0$CCj&#Ar3JSPve z?oUs}(t5SE8hx;i8Vr-iWdq?H+h^uSSzVYVoeie_2c(*AZrv1mO*UDrz&EC` z%_gWbwR&dZE3{aatOh)Ed!J7%cB|q@|Ef{KDL?882a-h`Z8WLd+JO!nf|U%A{|eO62LMBdn5b6p#|dp3K6`u9gp6 zd9kTop;5p({gkgvAr|AvQ;K{w$Tfn({;grur~U99A+qa2kVN(%7?kHKxbNDxK(D2` z`Rsvt7|iqq4iK1K{%~S@vc{Mcaz+7w9IX)AhW_Cq-@kQ`;G`<7D!{jX-?|CNnYslT|QIDh-&6{%GLak zhvnzX17u{-SR_u}#lS~I`&=+1UvPd9G9sP?>sJCqEo3_F6* zh>~s^0vWViWZE<^w0JzF_-e@s1vsM!O>xK?35z8%$txhBg0_F2e^`#!m!LM~nw7Ab zie+ahCRZj;X%{n(5|C7He%{Df`uTv+eYBVHfP&nZB$qcH7IL$I$o8qp851}uuW63T z|9EWWHvC5R-ON;#q+pfX_pP7YT#F)hO6u$-AP@fVww+63nlBRM)@5$~+)$Vf9cyXw z8$Y}*OLl(#t&}JS-UPd9K`9uUb5I!tsVvKCe1;p-*BTB%{aDn)_lYb;49-Ve4Jr^p zg0#N<hAudaeMVT_jQ(}#j^U5Iw>C8E-ya_UO+$u9jE>#W3F~bE)`wsO*^N6d9 zwh?!Yj!)vB7Nv(t^;WyNDb7j{s43Qk&yGg(OyC*16cRzKcRYQXS@+}DvkgZA)@>ve zXt*2sX*h+Iq761<AqKp zn`wpm^e^jF+FG`L>!Xe$ZOQ&};!QcGJ(!$(*z;LYx~|=O^@q3cxeS;2bGYE;DvDDV z5Ov3I=>EoXrX)6AHsEf$SF2j9Cr|BzRMC%DqjM2n$;7j{v~V?()Xsdu6Y~4>2+Elk z$3&|Q8^HYU^1+w{y`xP^q6uf@mT;N~P;cSK=a=Le;lbVR9BN`hpP zllVI`>xt^~C`prbkncHn5beo!knMRyjV?#Egn!EMh?&6c=wki4iRvDlo22xANZz*L zfU}WegSaSD$_Y@lWtm5(5waLsoG8mnu-#|XHn_;$`|%Qx2&nAW@s)CGO8K(o4vKoZ z{@(Tdo5n(7TJ~bYT)1Xa8Y3Nrp;c(<8Ml_)VCZug=xbef$e(x)5c7M5eBBCJBL6WA z3x8_LlgIjQNfErT1R>?Sb&v|H`2q(Gi){!^L)nyZ+97?c8w#hm6D|iq*V6Dx_|mdO zS`Lt-QTy43Ku*||n3heP2 zW38`HGerz%;n4Tw7_&$q3GDtc`m69_Z(QDGnsWBQH11|snt41dg^1c_@lugrvrSy> zVQe&mAKxm1HX8V?F`k&B7{DeaLkLRWFb(r^)4BX3D@;4E5kx2z7R#_-;u_16V>wgA z^F4Lz^%zw_4JQMmf*4G_g6&M#$0zJrl-8%kK)fY65Vct{m=AN1=2aIYlU>thSyO7f zB%gDxW7^b3{JYAlUSK*xI%L@#L)6Z%NtGYuCR*aI`Xh}!$T9TRG^g;2jlWm%Xi4=V zf?&Ke@Pb&Or}S}4Ww711Skv*@fB*4AN8Wb_yB1h6!*v@ZLti4P;72}IZRZ)Mi24&W zE7W_yV4_HI-3yo&_BBu8Po$TeLTr1a-|D&Pn;h{H*i2D#T`jDd%YlVsj!k(ee11H? zFjM11$-2+z?$}fK)p7jQ^^KJE8WV zT=Q-a#m2FSa&{&NU3Y}5^0bUT{4uXn04?8W%^KpPb3q(w=w}9B{Su*Kr+J!DKi@=p zz{M=lmbx!YcX{?p@rjmY5Vi@B71W0w~Sv%yiZw5zWb$}eB=^7FaHC^L48MgQyD zm5tvn`Eux+>t&klou!y`e37+0=5qh;4`1?a%M)ho34ciQrXki)^ogl5>Zfp`v4%75 z(dS}c+tU6k)={sYtRcYwF27R|~wLra9KuMNk*9xq?km-|spdO{o`M)bqj(7*@7zu30Y% zAiDRej$K-c{IxcJHUqmr>5;2(X!D&;lXIe~9{nT0NvaI(r;5`AO>{{0eZ z#BnhG`OS?9MPX0@ubuYIC+wHp%Q#@ZqGSq4h+aSh!D-IZ<|e0v`^ zcWbUdv4E)_+-lBRfOAfz6+(4^*7aLwl6a6v2Z#wtxMslxDk)>WzbDr%(?(o{J99P zEV!Uv%WmP-9T6g8F#k3r=w)a;s#MAMD?I4~=_1j5x1?9Ri6%G-6Yd?Yd;aPV#k`T) zd6cr0i0Qi3oXv72yT+Jj&&$}xsQ1U|tXoQjc8fjsK3l%Dy5xsqB{A9J@yv+q=ETa9HoZ7HJ-N4WHzqCEJKs{o*KlSOjqLp<8rJ0xJUboT} zQC6gP8gNm-4&<}qZgwHH5Jr!v!xdNCQ&@UT>vBWR&tN3y+%B#3Mji`O?awgK44T$s@wPcd1cRAft8pW3I^wRc}S}P%%z&DfLU&_CGNLHn| z^jm_W^|jOn@bf(hjk~7H(GvKa%YPAKmh33Nk*2s)v5GRZ#08#e1DZ4 z^fSs(fWz_-=;VqJPTEjlm8pJ*QQPzqJP%jEb@zx>085cDPv=%+lqvnDHrJv^I4tzQ zGs5Q{P*u%+R)6(@Nd9g*xJI>)`^sv>+dgoLQUIoO$7Cmy^|6>!o~wws1;2| z;#`5u;sm_J0+|B1Mb1NVRnC2FcuhkkMMqN3&<)tk?@uqvc$^c28D`E4#XEFJgVlg! zbha8aVn51-9^AC;by08ej zHEHY=wo1n1wRI}q#%zUWxH-0|EoS#fZFs})yNCq#bGI3?Q)~n+zvD8|hR|)@v?tY* zq}&m6@tVDR06v6%7YVIn+1(vPsp?5WO)Cyi#CYuIxr_@x^%Wt=YdCCL3VsomWEV&r zXs$K&al!v&#|hN^(36MqgqeV5WIDWHtzOxbnc2IworzGDRqBrJdTGCvay4V51mU+MWW8oq ztpFARJ*~MX8~n)-su(g4Uc=)Qr@CvfL`8qeVwk~`BaJ0StADMqjug8_429J=(0oC8 zeCpew6<-#LA02A&<2dz*Ix_PbMN96H=9YR+?}ba_6M=0LWI@Un_JzFkXmuY~zE69NPWYS_=#}x*;yH-4M;O%yv^r(HwM& zU{q_Zu`Sd1^*q;^v0P_a4ZBryZ>|jDK~Dk)mK<`2NQM zQ1TXKNNsDjhu3a{Ytk#H#d1k;IvFRdVK!WCsj!u_lTI+#IJG?S&tj_#6)= zb&MsC1gdnRxtOwi{Cj$HD5KOAD;3cbSWN{@E*N&f7LH$rq+79>-7ej1Ttmx=05ls< zpldQjQ+k+3j!R+E4UQ6GM3=!a)hz!5z`Lkb?_}7y4Xz^=5p{`^oVXD_Azo%>mS9?q z0-B*Na_6JL{J{3os?cG}fb^-V_acjKZD1ll40)$0u7~uyO68G(7+mB%y}DDl?yBhF z=l6DcSBEW<#J8R9@CW+(7%G{-gQJnpJETpOpj7&p3!$r~jy+Rh&GZ-m^1d_G0}}mg zT0fZ%Ir(&%GN-6r$=q%I#*6e0HH^s+Tsb8vOOO-vPtqI2zY0fy<&f9bR|4sQ{Z|0y zKPVjkHIElFHT-K%>G;ouW8^Q-NAGMtri|7BGz<|L;$@71z+KUifzn*$RBiLwa2s+K z=E!Y*D#`#z{_a@h3iEtIC#(eimn(lp}|kQ>w@% z69HFJz8U14_G)i z8;~fQ(GFP6e;i#2b^8=$S6okWq?S1N>NQ>`UI9-NUU(y4COb3ynm_)8U@eX&hl#tQ zRXOH@j%BZO8V_g8;-tNKTHv(o>g~r5=-^8hVm3pp@(C-V*eh$``OJ1CLkQkD6#1LB zuRyn-IPGhFm5*{v=6gRUN7PWtUxlUdIuB@-?Vkb5D601RCwxLk8iYBb85+HesztS# zooIf9uq%;CM^qsahvIgu0LD%AJ(ZIjlLxH2p&jZ~r)xfZ7p48gJmg z-u%A9SXTU3`RMtVZ2SXcS2UC-;@?l|U?fCa-0Q}`;`S(&%q@w#* zDdDryR@gxIfy-nU3Eieel{QX=Uh(MGv zO55n+2HYz^n;D%%qqjaP8S1reH8d)1sUPqQQIly4sjsAWth`n?^(H+k8cM7dtLNxB zfXL)FV({A--{IC>W6y*G_tkQ{rk)8V?W&d}3tl!(=3%F*G3M>~X^d^5qsIhM!Doja zdz*60$XL6bCzbii0c*|eu7Aq+{kKqFT~?=C4e2{2QI5Hn{0W*Bgp>g^2kgbp3dcYw z@db86*C%`{QFErxFcb4CWF&;cuP#xw`XlSx_brxnfl6Wym)5GtKjfGW2u= zG06tB!fUiXYsBV~T^RZ)s^Ps(One2SqY`gdJI(WRN(m#q9$~KyqT|Nwkg3~Fv$gkd ziOz3|aW@h@^qqN!G*)tp+idL!eRvZ`0ZDg1%r7wMbAa`>omfddGFIg_E*$tcHpEIE zq3$eIS)}30=ylyXZ!$GW;1ew$o!822V|%U63)uN6+N*4|4_!7GONse#8*LwgRu@M# z#~7i|5&gq#8`omoNY2a#s88N5RqvJDRQX&jK7gvH`{?H?2n1xD2&#Zsb@c z(_4XL?GQ(_&WrT&y8uxV=R%-Tz3^&S8CC{_=np_;{yljFP(KWg%?U9D+q4p!^U=5^=v+Fe zE!p<&MPFZ-`13bx8U(w7aQ2m0vcASQ|GhYd`QIlOIa5~!LkA~|zq#W6BbBJ0*rG6f z`^+ljN|`3X4R%1IG(~}tZX+sE7)3)xm?=lzMYOe4nu~5(E3(vUA63-OA#` zQ*~wDG-Msu#&H7%ylVnySj5teq(85Ew3zru!j_NSqau-d$KLT0C>o}b*%^j zMETcdxvIf@sH2yB`3xbpQhQ(j(Ai33Qz-^%BhPB=Am`Yc+tvDOwdXUm%LOkB;+tnB zVd|@Jx3{QJElaFY^19_NwDXNq2!poJg{=^?VIHLgp`J{m?*?g3Gy~bU87qfME)jL_ zS48LYs15Q@q(GpJnBM78PxhXHCDC{IOIiFBk> zSdJlqQ)Tm}!nDK1g}hUgqVNXr%xPp8Pm3VF6Yaz5Nys~u@=VYXhmY*)$gJ4@x6kAu z2RNOFY)mCD`S(RW9L>NQlY2myhl<@fypKi%ef@Hm%UR!t8Q1advs3OfNGA6aVZ(w!W#!xBa%G9}>)?`4{BVL32cXs_ z*bh~j;F1HP_TP)m(pZs#6??g2P#Rf`{-9D>?Rklw4nS#(Z$Vm_dX-#E7CvAQaoHy*KlMC%57kzUyr zbTJAz-~?{?=s7>z8}mzM)v2Ly;;hNedTnlkf0O_qH{CA(Cc{LG1#M#gI+gQ~|LRoo z{`*rYZ)WCb>ZA-XH6|4`boe5TUmHume*B|Npz!7J&4ilOxTgE7y87{0_S%3iEix?E zjS8kWKUC_f#$s{Mwt;NrRX+y|(Z`Q~tg|uze*lc!ZgV^n(*2K{Hz*)LFoOOTj0f5U zd>7VO){$zO4_6K>Uy*MP#NDv6QxT|z#INJxJB-uDEgj~~&90PnK_0H&`uhRKph2k9Zs@NG)RDUNZ_#t{)GY9$re zyE>qAVV9l#MOG8GhwAm`U!W?-(bMGl>-pt;0jvK$@BIf)_zO!JI+_0O)F=NpEamu* z45+MY^_P4*u|{^+l6BQmc3~01;wdjOKfhQ+xKsg33}-}mi+qGN-GxQl#T@iS{yU`x z7{U9OsP*R330_pWf4KKIkLwlJQ`WEXCj$L0V7DksB+W|nxSnjz^(MenFLof`P7W@B zZgn)1xfV2}NZ{CDRqcvc|E~I;uezuP(}71xQrBF<&ej==S=N^jQ;M#vKl8^rN{{E} zU8$1oi}$6oJK>(A()e*a99B-#yTS1-$|eEyQyKxjW6PCfp40Jdj|O!M78LSb3Z&Mc za^GXPBpXX|{{lN=Gx||!5DEV+#M>P_I=4e1B^6mf@lc<_ z^r`-Y;&JRyr^8EB--falSZD_Wcg9m8#Y5w3WUX0&Uw$+$EsnbeoIFOucZS~w=oO2tLMot(q`5v*oWGMi7>Xsah#ui`dLnqy0e7)R0FRaR zYki;G7FG6<$Q2JUda0z#3)?cvyxD*Es=p^NnF>E205^FFs^nc#dv(>0=4xhcwQaXG z7}+;nmwBa0vctiGYxz+^g9yX_H)xMWg?fwomo)WXb_4%|H3&+kHg+zivZgjhUv~(^ z9PDiVNp1a4FtCp=sr6!`2mG^$ChWs2HpSefgr;oxUQwOPVqZVdBo`Xm-dq^^*3W@B8Ny($AE) zmMK`C;s)z`ORY|KM6~^S<8^Q}ZzpYU4;_wvUa@#ZVrx~)0^Pb{EeKMhC@M>q=W`Td z>zaJwRkMhaF=exf`b{ALbjUApb#;Oe#iawjOB-0%Q2vdb>LcmAgyn;50qUpt_z!w7 z+5iBdrE|iVc)(DeQJQ3vS9QBBO?cty>4IvRiIRD%4!*+zoVUJPIGn1DeI(Hm9FI_e z6j|p94r0dzEFG4|`qpmz{M~q(bTb)vvk$h_Xd3d+nIa~uFxnF+l8uOA*OQI>uUKe% z7uGaA&Ry@87WrDH+kVXijs>aKmb`uGkPIEV(47UP23Z$omN~4nA4!sSwf(@9rc#6d$ddq{R zNxGA?(oBLURbtROGGobLD@ru-b?aI{Y+fxp)CaKW__j4QS$^@XR2r96(JYN;{D%BNGW9LGRC=0P)AJI#ZyaEw z4ByJYLxyypu%Yy5OKEf0I*%@t?4igRhc`2`s$NEc5c$V%Xl)+IV<$h*BC7$g)q{PA zH@VLaFUEF|`OKLFr@qG9BzC6tssJ?A4&%ireEL1z?x^A${1>mE zg9snRDTqJriK4@=3An$T?U2BdF&DO~!|mhpv6*DkzUCGX(RAgd^+aK%S-f(9R-=p~ zlkZ@M&BrGSPV)op;8|L9dlkKcJmy8%RMMa>PvkM)LK=QK>S1~pQ~9yFSEqxbBJFuyy=on%KbuXfK0-TZAD#ilpM;rCVF#s4Mh{tpaLWxgf=|8&&0rV2Po$c=ibXPi zH-YI&LwFW67-Lz+#pT84>siib_Q%K35Cag28?HEr>$p)SSzO**ZPvKz@NunfH!mHSb#+ z(-efyc0`+zWHd|v(Lwp)VE6UTHPp(ww%(!3wzTOKr&M?V173C&aADzer}^DM{``LV z?_A3Dl4_JBhuOO#J-nZ}{KAdn$vS3X&`Zub<@A64XauVbJe2>gJ>@4 zW9m*x(wF1`(U3RXB}*!Qf|g>!0bON$JC8?T>J;fM8=F-sBoennQu@;(ajZXl zx;4XljWSbo73M8!B5l2jyfX2#Hf6Zs0B6_kd+5p3oCgw};Xrl{g{Tw|tRFQP6Oj31RR-x5^gLC3OTY}uKM{>Sw#!Wbam*Bqgu|dM1&|U+hAULU( ztOD=}v9`8sT=52>-6Oa~4Ro(dAng)(+stZ!ZQ=2x|AEs5&bf?In>$HSbS+PiJ&ce5dq9m4c2+4Z5SO-}ror(F};zu&&itL|xL{yLndF#ie~ za{YVo{dWzclBw~Rhk)Zh)!-r}X=$Oa)#!us6=n>ctHe;m<-x9sRWMYQgmED7PeW&= z%1@KS>x#$bO)y&bps$KEH)d4T%)>Kag6NABjz9Mrh1 z@+?Bw&D1%Dz#H6bS!GEYDw7B zwh@@~zfXw7&wTfGd|q0WTq_b_$7@n8UEiC;*pWoCFabj-p;XMhZ4vXJgjMlDo*oIiH4HjM4-Y5<6Qi}q<+w9XzQElC5Y>p4RY8CSYGVT>e^UYMQ*5DT4^^W ze6v9M+KqoCwT_x#0>xq2Cgc%gtqN~PB|B~-&({ajYlFzmEXqxT~i1r&r zvLROW?oJ}FS461%9iXXS^EoQOiWJpLuIGrXx_c6+dH@6DnYa_RJM{()zq5SX3Rq?L zYwuIf9S541v=MV>l|gF26=kcO5q9U<(34xI-tOD8e?OvqAOXj#Jqp9;aBQagCY@rS zp5*#lS}#8M2aK&@jwjlC5cu-ZP!;lpv!|6yN?MiDHCKz=?M<&5^(7SPrB^d^7FEhM`b8ziDKphI(k|7^mG@#F0Z}>4 z>K4t-A_AuQ7i#s|E&2AqNN8!3(kVI2(P?6k`Qb79D?A|@Fe=q+_#}#5DNAaMt+SdGN}WYwy|t-SoC5Vt zq~o(L7NFD7E4vKTE8S|7S0lwCamXZ1G^d`@tc2j2iSi}x{0th<-sP< ztA_HvkII2CS6kU9f?1H`8^O1cF!l0`k(){S-=-B=HRrI!`#HD_GUClv^v<;Br!?!l zJ0U4AnU#GDWL`U-NyN%TD?Oe?wogneQce;ryz3R3Ng6T~^;~UkOyhGKy-^I$MyB*} zn+x+g&>1m9FG=n`C(*RoV`Rt6N#Z*{Jx)k#w7*|{C5gvlT?}h5X>b~Bv=T=momAyA zs*zh>L;$vP$>C;pu*x=-Go2$6$TL0+b6JfSaa?H!DXtfzX{jfls=sd=5Hs*m?8AZ9 zZb8mScLA*#;rezVnJzL}@yn#VkvA4U#^8oAcfT$KiWOh95MibaD}9MaDX?urcX)6> z+E;HrnqoL59`gwOkiDEbYAadhqyFZtGOidU+#G#x^iP>&tWfT)ns%gfB4x}}S)1au zxutPwVBX_BmTV0w`T304Awp;=AAS^j4!*h=E#N20F|QY2y*;0@g`S;h`0b`-Rn{;~tCEqgaSIrO_epEN zvpH$S=2^eQZ-uoDj!eY|uo=c(slyYQ?e}qgB!#>BZkjzb)OrI}FrQVs&bXu`LEJwQ zBYY@rH9Vq3mXY$CnN3KA*t78}lk*U0R!|%~zrftJ(F#9rkJLHbCh<#EKhFv-2LNr^Th!KEr+maSnClI5l7iK5 zjZVbBDcQRFG;zsP*&??4(h7bU=Y~ydjLODGP%H4u(Utm!VMNLMSM+hUY>bkUX;_0S zEqjzG6{e!L(+_6RI~nVI`d$a^!QMs{bZ8#SQE$G)?m!QBfNIf-r8V7QuuUhrUts1C z4Xh5eD_-5+BEilVb9>uW$OXv59Oci=N;p9d*};MPPC(uF6y~x>rKZ@xw+i1@kop(Rp@#1Y! z9Voh9lXMODC>DZ=3$dJBqshMFUYaY)KCi{vnGs_+4kbew);-Wsy#bu zT&XjlaplO4!6QGoCv)m@asXCowhybk+J43{?5Bm`Vfu+0yzMfP|K@8CY!%Zi3LMyE zzh9DB&oFL*i;Oi!+#{|byuGZ*bH>9x+x}bb%*n_R-g$FmC%GNuwvwv0|6N)ctNtz@ z#D#>4gGy6 z(!wWy9<4Ljq1*s;Xnx(OMYRq?&L98vI+a#PBcuVyt)l#S26$TL3cV|S$x^3ZIW2P=f<^2fa$ND=_@F zfCtvsFrY6(gYGUT9uf0hn`J1@Zw<%@^AWO60eLM2@I?qt2%CZwU@fYeOeu2+#$}#) z)-mf*3E!XXhWDJicU1Rw;ct{~tJO1~|~j*7`o&&5)QP_TJmRhzjv6fhj04J55GI#YQ4g1B_)ycAJ3VX$Ps z8fcvG<}Bu3jx^4W*27(j+&ii8;AU{g;`WD_EpEi1Pz!~+9FX+pY{MwI4qr9Q!%oiK zjR-!&8XY}Ad~I;ZUey?^C0U9RlVs)VsrMPD&AS2^6JoZ)&RHm)3+g%tab5O&#rH)I zeIvLj!{NC|KVLJ(&P0y@!{Mz0!TqhRFu~!&UZYZ0L!^))=ER0c{|hfIrWnq0?U@3B zaSS_M25kD{yck2C=hN=}gmqRhZ&pwKqoJZ&;(+x{<%j2tgpBRB-yNsmHB*+1Ab`K) z7C7i2P=k=5*Wrb6aa4Som_Rhs3ogV9cWJsq`Fr@sE!8^B&q3f9xSY7DUCoy)h5fsH zrA|VjTTv$EPSV3~9SWVaY9s0*DxK6?`&LFM-gfadk$3xo_MKkJI@E~a75jdzR6zDt z0%2>QWO9UhAr9-2G&iU`3MkX0T^QgPS&Cv z!A=@k2#GFyyVR_lDjmDz`7427Ub{-Pq6w~CQILVzxv2EHgijIP{baIb26GNUwK{rO zy9cuyVoti2YoVpO5^g-W(h!^dsNh$MfEglMwQD_a3>vpB!Af^f)kaPMt|Dr;t^mYV z4PnZ_Ye+Pm{B0$JOCUM_E=+nx0cH<}7D2nS1P%qk?XwuQd(ugCfAZdg{pxMb6UgK_ zP0w1V)_sXhcsE7->w~0#h&&|)f5e@>Z>ltA%fAA=I%0CgC^dxjt-Rm6G%xwVe-5DE`e5>lWgSZ03YFBr5%lQS4JeBx zzrehY1pa-@_ofI;lK;hLkZ}J$;$T7RFU8?k$HC0P{QsadiCc1Ct?t3Dldd9XG!fBn ziVFQMk{WE7Ok@io2D61yMzRd8nYJYt!!9Z3lk7X$9o-_VH@%S8c~R!6O=SuUT6SiK zSy>+wuAL2ccS}zMK+THOgrN((^%{{WklIQV6dBkG|dmULM9a<5bgysgiWsIi);+vB~OSeo}vxt7H1 zG;3_wvJq*^~e^;3)&0vmWeJoeXIkflpAA)0f1D(Q?SSb2aQH(06 zgAW!E^6C-AT(k9*G!YuL%+}S1H#6NqrduYz_y=f={FX9}kK>uc0d8r|p(Bm=2 z$d=xMr*q$uBNOGtlT1RT;MUs|kMJ`gd`pqO+Zo;Xk#*22}nb!p=-I_|b+oT9ss#0rCdKODK*+X;Tz|DiTPn$8pKN zv8V~@iC4xSxQ!?PLUhv&d94_x`HK!5iHaIA8SQ_O_Kx4V?p?BQY&%)Oif!ArZQHhO z+qP}ncCunSSxHt-_I|qG(Qlt|c0c2sKj6N`{b7zdf3vD))hsdN$yAi-%jm4_E+E&y zGzCf6D0YW!QIi)4aO4`i>m+syNMMi{0oZfvis~k>co+``4{C_SeJRdI;W^a!hUc6{ zy%rSd*>`ZS4Y8@=5kB)CB12vUZuhcoH|-H|y|Srv-gwv0_ftF)iuYF%s}twe7P|fO zu3V~nHuRDW$i%T!$_W`?n-5V>JwyzXRpbKfv6=|fey+s~fhZ{F%RLU9+9P?4sId5c z?PU#-YQCX*Zfn_57GgNM*9sPf4V0csjCn=CW*1AmIY;^au1Eq27}=OEPngAC(YuCL zYVX56Fu{kf3d6D0OA9U@B$(r~2#UF6VbK{Du?2j}P=?P_Ac5pxkoR5q>4fUlzMz$~ zKK$3n>h5iiJig^k>r0V}* zw#St|XT;U=Ot@DE;8Re!LP~jhiY#WcfUoS(7<$JvUkDZ+{;H z$lBM20NJR-k5)6-q}qq(d`_S#zln%;KzEs1u zASVhH49ek%>DvFGoj~o?IArVjHh)>U5zDCZ{xh@I`VYE^j_$$(_dF_&Z^IuUlf(Asz%v zIbn%?aWl)j`6r9Wuc?w}I&+;@zv3I~e>Le+skYmVH2cdC$XZEOw!X#kfhoDtU5gj=#!`i)4(CCNYk(+%*}*=!tc# zrq~H))ee0XPsR6d)=%s}S?KK>l=A#X){o_XF0+4e&-{i~|7{d2O51)Pn|No!chdW( zph1CZkO{<ibT5T6U+cfKl9_S_m|Fqu&zb!;CTvbASOxPQo zx;&kJ$TYo~)!p?4a0>|qJa1d%gLMUldhx1yU(>sNPEx6vl(V*u#<1{ajE9K?Efg~lC`ut;^F7f(9&rVLK( zrjyytW;1r$&^KdC7E5er6}s(UekCgj7!?rx;N!#;-(1fKbv{BO2>EP(^*mfsN9=&k z2&GsUFivsFonq@@edo~jFs5TlhdrW9e((MbZ$i2osek2N;>asXq5Np<<(yXbxzH%dM>2fa$YLoV(o{w33XzwH49 z+JjxRzUvAzri+Q=!YGO0%a_ylc#Q=>CMgWJE<}BJ&V- z1O^;F#sp9;16npxW&a46L!I#Pe21pET70<6Gvm$ASK+Vs0HY+okB9=-JeSv@7Dv3!edBHWcG)}11ENR0tr_CdC5>yFI$C(|7Rt4ACJ4S$yvGf-b0J8+qZ%X8)teAM zGI7VoBL_JUN+BNPdPSgEM2DkTRU*m%x;OpB>1nB)l;iDMacX;>L zSAE9_4!D9IYBc%p-?p6^>1#znQ!=Wk^Px6>= zC={w<%4TT#&-~m9g`!9zQnEqRj52c@aHrr;d<=*&AR7aBLdg5rfD$9oYL-L>FsJd= zg!(3!C-Xi_`#Bn6qk{?|fOR&Y#L6iFh|9a7TkF4GLFON&R{AhL{!$ef|lg@l+_ zj0W5ux79|d^;G)S{Q|Y-MvEy7{bHfG&E>KUApPhJk8(kv=BBt! zk+3!k)L67>tiW^`mVB=0nKXYnuuCVbUFiEza(6=PFDV>HcZJc<^iV9jSvg zoEVFR)AWQxQUe}D*9ukkXY`c~LTnal<3ZIDl=%j7tb&LpIC#fl#?V!>sNCxxzYoIG zaHXOQ*KsN74d^3OPAulMC1?IrG6o z*|4t=4ui_$Mk-_4T~7BQZp;S)Hk$m-Fr(B%K{i@M)eXEP(sGd{@+Ah`86WHnf zuv)DmdrUJ$S!+@vv$GsWFy8VS%u?YTD+b%F84-{WvX|?HM$cj4#L)dVPlvp^y>(Nt zB+uG9W_o$n*q2*OA>q+~6Pmr)euA1l?A|mWF$jg6BzdDV)G!Qe@7(VH{)++44(rB7 zEg8;G)28wbQtjJe7!GV9pGyqKjnf(e zt1vBc_$zC(?=Bk(A&*{2)%aH2>YM8;=ZTh0MuU53#)$+`} zA6U3@=7`iPr`X9BW{|bi$-%~0%lB^WBF+@ci%`ib3lzaX6wGrL$ynjQZ3K-7%I4J7 zhFMP^t~6iPb9T9VHcIBm)yV#9shcuAesboF*`*6;9J=|?N*fZJZC-Na=`EE@0-S7% zGj(DLX98*zS4Aqxl(P@a8`BD{=1VmS;La6G!sz8qp&h8_^5(QpGb(1eBIuK=k{AxX zA(hG=fZ7!c#*YHYG^Oa}7<_4ob}smF_gBAj_y>2<8$+Vfe7madLkIAC&51wwC#6pH z7i-_M16Ou!hd+?seUg#Ib0zqp%G*NljO3_wouPOJmCj26X$U)`*ZQ3x3k(bXU|6dawFMYZ42N^)7Fi_2Ex;wig@Yd-lZ``U zLd`NBjs{AoF6amAR4phgO&1%801+~w%CINvDS1HF=Uh%$o*D;D=B!$Ym{EOT4X4%$ z#Am#%5TkRyH@_Lx$a&dj(z#S-KUJp*tRk^wnHfvd{ULoibi+15lM9l}ofQZ{Ae-9? zqTt389N2D7ynbJto2B$FRZRKCRc|VSubhha#(NqlR^IhgG^;IOUoCggRfE-`d!n%A^e!%?7}EO8 zk;`b+x`e||q+_G71E%C|!I6C%!uZel)C>kFm>(rfmpNWuqhkPgyokfnfgW9hZ42XM zUaSvk&qg}dGQCPpPS099TkG?UrH$3q#_*C=;DJ@f(;FdRJ#|_xK#(pa-Td{k<=cjJ z&XeiW9>d|aS!M%AW{PgYd;3FDt}2Z0Y?#gO7EtId)KsNLf=T2~S6H$3}t;ra-CIkM7Q0G9N&fcJ+(N1U3_c>+GlR`}_HK}IXX@s=x z=62_ou|&n)Z9fM?Y&0B^hS^$~pLfQ>TAA9qt_*1L07Ebds9sRIMEI8u8?zYO4Wo5(aFEeek}he8_L zU?uH(vQav7dd{ZTmR-^OdI6CYH5G+EvC1^)MD7^S>)JMEZE{d!#RJcTTQwcrR~n6K zpE{`>^di707w#Frp7}ED^LYy&7uFYTWOexgqcahx6JFWWwLv!1{v~vttdw}~e&a9W zs+`%7W}v-|Ca}dKAWR3kWbv$d|GwB%?2BgKZ<+CDAp;;M1+0}c9&VwEm6<~6$P}!eZU{-x`su^N&7ch=lWSf2>B!eL;y+~% zI1x(5tCY1S8hW(UHc9H6%)`%`$|eo9EvUvo=-pO6R8tYwb$$I2KX8?Q#g1#FnVL`{4~nvth{4LR#B-CliyZT@rc3YtZY0gr=Z$v zAg?@bc-s@oA8Cil+bspKf$5h2frpR;0jU*(4)`pl7SFvfKZ?NsMG$1*X_S{sFNWn_ zgVDR+&WGcUJwY5>_?R#%r}E;15AGX6ER(LahT<#9doVrD4RjrB6hJt2zvl9hCwnUq7csV_^1ft15UXwkn$C!h}{U; z3=!HDmB8qPJQdN7N~F6TOMTdKCYN%~%fJ^}SrxppdyL`y{1+E_N3=nGUbbL?`8bA! zP%p8tUV^0PTK|kibrnr(wLF7AeF#S#{`qk4aLak+(CG#gT$OU!GLYFER-L@%kcl-g z%}R#ac6OL~bz92rs(Gii^TnS2Z%4g>1NoAJ!L|TYn*A&U!K~?oz2$YXKj_EgVias@ z4^`Hcf^7@1;W%8W$xxyTs6oFE)z}gJc-|_U4N_K;O)er(CZS@k&;y&Qu}x_0%~{%* zx}8m9^p=Bi7X#Isfmbi)=DiYnwJxb)sCSRKV*tR-1dq-UnO5$0Ay$kQH-auAuuoKM?0T%IM&u!uN)F8&x_aNH(^?xQ z1}#sb^(G-^c3n}7Da}F9FOlEftk}^CliY1Yf?aSanyIln(d&>~4FX$Wt2bPnEYM3> zY=J8jWiBMt>!4TdkAHePfvh(Apst1dup^xGNvzCnyqC~H44vV>b5#3|wmzv7>!+S| zczpduW|zEkk>RVa{Ylm$amsG-V3i5t+E|uwwI9tUxtVmlAKao;C+d1Y^IRtzgPkf| z*xl*3&_P=F$)?fp*}ybSTkM9aWBr~sOO5UuOL?%>@f-0HV>np&L;Maqxb$^?X~#~C zS{&JeM&|^I8U2M(zG1qb-FgO;01q#Q=F^W-SA1Kv?sJ}M-(n$%vi>a0&a10qjJw9p zN0n{UgOmN+u0U@U!ljeadR>B6B5^5}wLRfCj(GZ@AZbC5@9{Zrmg47%)l(&DOtvu%gE5`ELTxsu5 zY#!U#p3v`HuIp3M*Yfu#%#V-WzZby~6NW-q0072+ObGZlAcVgJgi5w{=7#?bLQs)( z{2`3+M?}NixZVYu-5#P|+>fhBnIJt>ny=*$+{KPyRQ%U>&{cF%Gt-@g>g7yF#BN{i z9*~w7gtCx$aKOQk|E`eyV-*^{B#AN$_|w$mv)A_LcM90o>&0>{0M7urdDh4l1dLbJ zkTgziQNBJ+uoqRzij_Y50`0wrB-=1U`?kww!Le;~u^mqD5FLT=qyuofI6!OTQK?rh zy7e_v1VvBCQL+Ome>NLXm_EzGkZZS)0n=OBLe@0eUqB&ZqKXl&LUD*(-MpGtxU&O_YEaZf!AZ|ln zV*2y~x3=fnzCwSz?(q?djVUHS0Y>JlQo~+*^8hZeXZEUZW25+)^OCFKR2#aej<9Cj zza&I%`|Uogy(A}#8!>bV8LayPFeJ@_W24wimRrmrL55X))=WB+wr}dyamc4g5#}T* zMrF_XH*{MNtGTHYwLPwFaM%(&;skYrQcFj=Z%o^p6#zjf$P|J>gC!b&84fI<{~Tu| zHf(@)o?S?v38d9EZ=X^K)FpxN7AR$i=}-MXL2LZ*6qpp~zZWDP7YgVjXlg}&Nqxdx z-9ZyEjKc{F^WhYYIO0S(#rd%KwJ(ISFAsXbrxH%tj&aCX_D}i72D!w2;TW2L+x|Lx z!9ltU{II2CNlv_Yd`Ihe25xGL;KKD7mt*&Xm3W48?~uGq7K}~pDC1^;Y740R<(M(y z8|_4IB+eNT#53||C@5wt!C*v)2g)kPPk9dW3O$M^rV>KOpz0o}6wKUnF4dsq!p